給你一個(gè)經(jīng)典的例子。run里面放空循環(huán)來觀察多線程是不合理的,空循環(huán)消耗時(shí)序極小,用sleep來間隔時(shí)間才是合理的。

成都創(chuàng)新互聯(lián)主營(yíng)順河網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),順河h5成都微信小程序搭建,順河網(wǎng)站營(yíng)銷推廣歡迎順河等地區(qū)企業(yè)咨詢
class?RunnableDemo?implements?Runnable?{
private?Thread?t;
private?String?threadName;
RunnableDemo(?String?name)?{
threadName?=?name;
System.out.println("Creating?"?+??threadName?);
}
public?void?run()?{
System.out.println("Running?"?+??threadName?);
try?{
for(int?i?=?4;?i??0;?i--)?{
System.out.println("Thread:?"?+?threadName?+?",?"?+?i);
//?Let?the?thread?sleep?for?a?while.
Thread.sleep(50);
}
}catch?(InterruptedException?e)?{
System.out.println("Thread?"?+??threadName?+?"?interrupted.");
}
System.out.println("Thread?"?+??threadName?+?"?exiting.");
}
public?void?start?()?{
System.out.println("Starting?"?+??threadName?);
if?(t?==?null)?{
t?=?new?Thread?(this,?threadName);
t.start?();
}
}
}
public?class?TestThread?{
public?static?void?main(String?args[])?{
RunnableDemo?R1?=?new?RunnableDemo(?"Thread-1");
R1.start();
RunnableDemo?R2?=?new?RunnableDemo(?"Thread-2");
R2.start();
}???
}
JVM是一個(gè)java虛擬機(jī),所謂的java虛擬機(jī)就是和普通的虛擬機(jī)一樣,擁有自己的CPU,RAM之類的。我們所使用的操作系統(tǒng)是Windows的操作系統(tǒng),Windows操作系統(tǒng)支持的可執(zhí)行文件是EXE文件,也就是說在Windows的操作系統(tǒng)上只有EXE的文件是可以直接被操作系統(tǒng)解釋為底層機(jī)器語言并進(jìn)行運(yùn)行的。而java虛擬機(jī)可以支持的是.class的可執(zhí)行文件,在java的虛擬機(jī)中遇到.class的文件就可以直接翻譯成java虛擬機(jī)所能是別的底層機(jī)器語言并進(jìn)行執(zhí)行。這就是JVM的機(jī)制,正是因?yàn)閖ava的這種機(jī)制才實(shí)現(xiàn)了java的跨平臺(tái),在不同的平臺(tái)上安裝能夠在相應(yīng)平臺(tái)上運(yùn)行的虛擬機(jī),然后在java虛擬機(jī)中運(yùn)行java的源程序,“一次編譯,多次執(zhí)行”就此實(shí)現(xiàn)了。
所以java的跨平臺(tái)是離不開虛擬機(jī)的支持的。虛擬機(jī)充當(dāng)著java源程序和操作系統(tǒng)之間的中間,不同的操作系統(tǒng)只需要尋找相應(yīng)的中介就可以實(shí)現(xiàn)在不同的操作系統(tǒng)上運(yùn)行。而java的編譯只是吧.java文件編譯為.class字節(jié)碼文件而已,然后把字節(jié)碼交給虛擬機(jī)去執(zhí)行。
虛擬機(jī)在執(zhí)行的時(shí)候是讀一句字節(jié)碼文件人后解釋一句給操作系統(tǒng)聽,這就是為什么java是解釋型的語言。
所謂的編譯型的語言是指這種語言被編譯之后生成的是可以直接供操作系統(tǒng)執(zhí)行的010101文件,像C,C++都是編譯型的,java因?yàn)橹虚g有JVM這么個(gè)東西所以是解釋型的。
自己復(fù)制粘貼吧。。。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ArtDesignFrame extends JFrame{
public ArtDesignFrame(){
setSize(400, 400);
setTitle("draw");
add(new ArtDesignPanel());
setVisible(true);
}
public static void main(String[] args) {
new ArtDesignFrame();
}
}
class ArtDesignPanel extends JPanel{
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Ellipse2D.Float ellipse = new Ellipse2D.Float(-80, 5, 160, 10);
Random random = new Random();
g2.translate(160, 90);
int R = random.nextInt(256);
int G = random.nextInt(256);
int B = random.nextInt(256);
Color color = new Color(R, G, B);
g2.setColor(color);
g2.draw(ellipse);
int i = 0;
while(i 100){
R = random.nextInt(256);
G = random.nextInt(256);
B = random.nextInt(256);
color = new Color(R, G, B);
g2.setColor(color);
g2.rotate(10);
g2.draw(ellipse);
i++;
}
}
}
*****************************************
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Calculate extends Frame implements ActionListener{
TextField t1 = new TextField(5);
TextField t2 = new TextField(5);
TextField t3 = new TextField(5);
TextField t4 = new TextField(5);
Label l1 = new Label("=");
Button btn = new Button("計(jì)算");
public Calculate(){
setLayout(new FlowLayout());
add(t1);add(t2);add(t3);add(t4);add(l1);add(btn);
t3.addActionListener(this);
btn.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
float x, y;
double result = 0;
String op;
try{
x = Float.parseFloat(t1.getText());
//y = Float.parseFloat(t3.getText());
y = Float.valueOf(t3.getText());
op = t2.getText();
if(op.equals("+")) result = x + y;
else if(op.equals("-")) result = x - y;
else if(op.equals("*")) result = x * y;
else if(op.equals("/")) result = x / y;
t4.setText(Double.toString(result));
}catch(Exception ee){
t4.setText("wrong data");
}
}
public static void main(String[] args){
Calculate mainFrame = new Calculate();
mainFrame.setSize(400, 400);
mainFrame.setTitle("TWO NUMBER OPERATION");
mainFrame.setVisible(true);
}
}
************************************************
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ClockDemo extends JFrame{
public ClockDemo(){
setSize(400,400);
this.getContentPane().setBackground(Color.blue);
this.getContentPane().add(new Clock(), "Center");
setTitle("時(shí)鐘演示");
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
ClockDemo mainFrame = new ClockDemo();
}
}
class Clock extends JPanel{
Thread timer;
int oldh = -1, oldm = -1, hq = -1, mq = -1, sq = -1;
final double RAD = Math.PI / 180.0;
public Clock(){
super();
this.setOpaque(false);
ActionListener taskPerformer = new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint();
}
};
new Timer(1000, taskPerformer).start();
}
public void paintComponent(Graphics g){
int h, m, s, q, x1, y1, x2, y2;
int x0 = this.getWidth() / 2, y0 = this.getHeight() / 2;
int R = (x0 y0 ? y0 : x0) - 30;
Date d = new Date();
h = d.getHours();
m = d.getMinutes();
s = d.getSeconds();
g.setColor(Color.LIGHT_GRAY);
g.fillOval(x0 - R, y0 - R, 2 * R, 2 * R);
g.setColor(Color.black);
g.drawOval(x0 - R + 3, y0 - R + 3, 2 * R - 7, 2 * R - 7);
for(int i = 0; i 12; i++){
y1 = (int)(y0 - Math.cos(i * 30 * RAD) * R * (float) 4 / 5);
x1 = (int)(x0 + Math.sin(i * 30 * RAD) * R * (float) 4 / 5);
y2 = (int)(y0 - Math.cos(i * 30 * RAD) * (R - 3));
x2 = (int)(x0 + Math.sin(i * 30 * RAD) * (R - 3));
g.drawLine(x1, y1, x2, y2);
}
q = h * 30 + m / 2;
drawHand(g, x0, y0, 10, R * 4 / 7, q, Color.blue);
q = m * 6 + s / 10;
drawHand(g, x0, y0, 5, R * 2 / 3, q, Color.yellow);
q = s * 6;
drawHand(g, x0, y0, 2, R * 4 / 5, q, Color.red);
g.setColor(Color.black);
g.drawOval(x0 - 2, y0 - 2, 4, 4);
}
void drawHand(Graphics g, int x0, int y0, int w, int L, int q, Color c){
int[] x = new int[4];
int[] y = new int[4];
x[0] = x0 - (int)(Math.sin(RAD * q) * L / 6);
y[0] = y0 + (int)(Math.cos(RAD * q) * L / 6);
x[1] = x0 + (int)(Math.sin(RAD * (90 - q)) * w);
y[1] = y0 + (int)(Math.cos(RAD * (90 - 1)) * w);
x[2] = x0 + (int)(Math.sin(RAD * q) * L);
y[2] = y0 - (int)(Math.cos(RAD * q) * L);
x[3] = x0 - (int)(Math.sin(RAD * (90 - q)) * w);
y[3] = y0 - (int)(Math.cos(RAD * (90 - q)) * w);
g.setColor(c);
g.fillPolygon(x, y, 4);
}
}
名稱欄目:多道程序運(yùn)行Java代碼,什么叫多道程序
本文地址:http://chinadenli.net/article18/dsihpdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站策劃、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、做網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)