java线程同步
没有使用线程同步:
TestSync.java
/*
线程同步:
synchronized
*/
public class TestSync implements Runnable {
//Timer作为参数
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
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 /*synchronized*/ void add(String name){
//锁定
//synchronized (this) {
num ++;
try {Thread.sleep(1);}
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
//}
}
}
F:\java\Thread>javac TestSync.java F:\java\Thread>java TestSync t1, 你是第2个使用timer的线程 t2, 你是第2个使用timer的线程 F:\java\Thread>
使用线程同步
TestSync.java
/*
线程同步:
synchronized
*/
public class TestSync implements Runnable {
//Timer作为参数
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
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 synchronized void add(String name){
//锁定
//synchronized (this) {
num ++;
try {Thread.sleep(1);}
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
//}
}
}
F:\java\Thread>javac TestSync.java F:\java\Thread>java TestSync t2, 你是第1个使用timer的线程 t1, 你是第2个使用timer的线程 F:\java\Thread>