public class DoubleTreadTest {
public static void main(String[] args) {
// 新的線程對象,不能保證順序打印
new StaticThread("tt1").start();
new StaticThread("tt2").start();
new StaticThread("tt3").start();
new StaticThread("tt4").start();
new StaticThread("tt5").start(); ide
//用的是同一個對象的 不一樣線程,經過加鎖能夠實現順序打印。
Tread22Test t22t = new Tread22Test();
new Thread(t22t, "th1").start();
new Thread(t22t, "th2").start();
new Thread(t22t, "th3").start();
new Thread(t22t, "th4").start();
}
} this
class StaticThread extends Thread {
private static int t; // 靜態字段 是屬於 類層次的
private static int p;
private int k; // 局部變量 是屬於 對象層次的 spa
public StaticThread() {
} 線程
public StaticThread(String name) {
setName(name);
} 對象
@Override
public void run() {
try {
Thread.sleep(2000);// 100 30000 等 線程執行順序不同
} catch (Exception e) {
}
t++;
p++;
k++;
System.out.println("t===" + t + ",,,p=" + p + ",,,k=" + k + " name="
+ Thread.currentThread().getName());
}
} get
class Tread22Test implements Runnable {
private int total = 10; // 私有變量 也是能夠用來進行計數的。。。
Object obj = new Object();
public void run() {
synchronized (this) {// 對當前對象,進行同步 或是對類中的某一個對象進行同步,其餘線程等待
// synchronized (obj) {
if (total > 0) {
try {
Thread.sleep(3);// 30 3000 等 線程執行順序同樣
} catch (Exception e) {
// TODO: handle exception
}
total--;
System.out.println(total + " name ="
+ Thread.currentThread().getName());
}
}
}
} 同步