給你一個經典的例子。run里面放空循環來觀察多線程是不合理的,空循環消耗時序極小,用sleep來間隔時間才是合理的。

成都創新互聯主營順河網站建設的網絡公司,主營網站建設方案,成都App定制開發,順河h5成都微信小程序搭建,順河網站營銷推廣歡迎順河等地區企業咨詢
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是一個java虛擬機,所謂的java虛擬機就是和普通的虛擬機一樣,擁有自己的CPU,RAM之類的。我們所使用的操作系統是Windows的操作系統,Windows操作系統支持的可執行文件是EXE文件,也就是說在Windows的操作系統上只有EXE的文件是可以直接被操作系統解釋為底層機器語言并進行運行的。而java虛擬機可以支持的是.class的可執行文件,在java的虛擬機中遇到.class的文件就可以直接翻譯成java虛擬機所能是別的底層機器語言并進行執行。這就是JVM的機制,正是因為java的這種機制才實現了java的跨平臺,在不同的平臺上安裝能夠在相應平臺上運行的虛擬機,然后在java虛擬機中運行java的源程序,“一次編譯,多次執行”就此實現了。
所以java的跨平臺是離不開虛擬機的支持的。虛擬機充當著java源程序和操作系統之間的中間,不同的操作系統只需要尋找相應的中介就可以實現在不同的操作系統上運行。而java的編譯只是吧.java文件編譯為.class字節碼文件而已,然后把字節碼交給虛擬機去執行。
虛擬機在執行的時候是讀一句字節碼文件人后解釋一句給操作系統聽,這就是為什么java是解釋型的語言。
所謂的編譯型的語言是指這種語言被編譯之后生成的是可以直接供操作系統執行的010101文件,像C,C++都是編譯型的,java因為中間有JVM這么個東西所以是解釋型的。
自己復制粘貼吧。。。
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("計算");
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("時鐘演示");
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);
}
}
名稱欄目:多道程序運行Java代碼,什么叫多道程序
本文地址:http://www.yijiale78.com/article18/dsihpdp.html
成都網站建設公司_創新互聯,為您提供建站公司、網站策劃、面包屑導航、關鍵詞優化、做網站、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯