没有使用线程同步:
?TestSync.java
class="java" name="code">/* 线程同步: 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>
?
?