扩展java.lang.Thread类
生活随笔
收集整理的這篇文章主要介紹了
扩展java.lang.Thread类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.multithread.learning;public class Thread1 extends Thread {private String name;public Thread1(String name) {this.name = name;}@Overridepublic void run() {for(int i=0;i<5;i++) {System.out.println(name + "運行 : " + i);try {sleep((int)Math.random()*10);} catch (InterruptedException e) {e.printStackTrace();}} }public static void main(String[] args) {Thread1 m1 = new Thread1("A");Thread1 m2 = new Thread1("B");m1.start();m2.start();}
}
程序啟動運行main時候,java虛擬機啟動一個進程,主線程main在main()調用時候被創建。隨著調用
兩個對象的start方法,另外兩個線程也啟動了,這樣,整個應用就在多線程下運行。注意:start()方法的調用后并不是立即執行多線程代碼,而是使得該線程變為可運行態(Runnable),
什么時候運行是由操作系統決定的。從程序運行的結果可以發現,多線程程序是亂序執行。因此,只有亂序執行的代碼才有必要設計為多線程。Thread.sleep()方法調用目的是不讓當前線程獨自霸占該進程所獲取的CPU資源,以留出一定時間給其他線程
執行的機會。實際上所有的多線程代碼執行順序都是不確定的,每次執行的結果都是隨機的。
package com.multithread.learning;public class Thread1 extends Thread {private String name;public Thread1(String name) {this.name = name;}@Overridepublic void run() {for(int i=0;i<5;i++) {System.out.println(name + "運行 : " + i);try {sleep((int)Math.random()*10);} catch (InterruptedException e) {e.printStackTrace();}} }public static void main(String[] args) {Thread1 m1 = new Thread1("A");Thread1 m2 = m1;m1.start();m2.start();}
}
start方法重復調用的話,會出現java.lang.IllegalThreadStateException異常。Thread1 m1 = new Thread1("A");Thread1 m2 = m1;m1.start();m2.start();A運行 : 0Exception in thread "main"
A運行 : 1
A運行 : 2
A運行 : 3
A運行 : 4
java.lang.IllegalThreadStateExceptionat java.lang.Thread.start(Thread.java:708)at com.multithread.learning.Thread1.main(Thread1.java:27)
?
總結
以上是生活随笔為你收集整理的扩展java.lang.Thread类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把对象转换成JSON字符串 第二稿支持
- 下一篇: 实现java.lang.Runnable