?? threaddemo.java
字號:
package thread;
public class ThreadDemo extends Thread {
// 覆寫run方法
public void run() {
for (int i = 0; i < 5; i++)
compute();
}
// main方法產生另外兩個線程和原來解釋器的初始線程加在一起共三個一起執行
public static void main(String[] args) {
// 創建第一個線程
ThreadDemo thread1 = new ThreadDemo();
// 創建第二個線程
Thread thread2 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++)
compute();
}
});
// 設置這兩個線程的屬性
if (args.length >= 1)
thread1.setPriority(Integer.parseInt(args[0]));
if (args.length >= 2)
thread2.setPriority(Integer.parseInt(args[1]));
// 啟動線程
thread1.start();
thread2.start();
// 這個main()方法是由Java解釋器產生的初始線程來運行的
for (int i = 0; i < 5; i++)
compute();
}
// ThreadLocal對象有一個屬性值可以get()和set()的,可以維護不同的線程的不同屬性值
// 用于記錄每個線程調用compute方法的次數
static ThreadLocal numcalls = new ThreadLocal();
// 供線程調用的方法
static synchronized void compute() {
// 計算被當前線程調用的次數
Integer n = (Integer) numcalls.get();
if (n == null)
n = new Integer(1);
else
n = new Integer(n.intValue() + 1);
numcalls.set(n);
// 顯示線程的名稱和它的調用次數
System.out.println(Thread.currentThread().getName() + ": " + n);
// 模擬需要大量計算的線程
for (int i = 0, j = 0; i < 1000000; i++)
j += i;
try {
// 線程休眠一段時間
Thread.sleep((int) (Math.random() * 100 + 1));
} catch (InterruptedException e) {
}
// 當前線程暫停并允許其它線程執行,因此不會有饑餓狀態的線程
Thread.yield();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -