//线程同步问题
public class TestThread implements Runnable{
Timer timer = new Timer();
public static void main(String[] args) {
TestThread test = new TestThread();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run() {
timer.add(Thread.currentThread().getName());
}
}
class Timer {
private static int num = 0;
public void add(String name) {
num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(
interruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
//以下3个类相同,【运行结果】为第一个类的结果,请注释其他2个相同的类
//2,3两个类主要介绍synchronized 的使用方式
class Timer {
private static int num = 0;
public void add(String name) {
synchronized(this) { //锁定代码段
www.atcpu.com num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(InterruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
}
class Timer {
private static int num = 0;
public synchronized void add(String name) {//锁定过程
num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(InterruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
/*
运行结果
--------------------Configuration: <Default>--------------------
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程
Process completed.
*/
摘自 Yours风之恋