码迷,mamicode.com
首页 > 编程语言 > 详细

java学习记录---synchronized

时间:2015-06-02 14:49:34      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

 1 public class TestSync implements Runnable{
 2     Timer timer = new Timer();
 3     public static void main(String args[]){
 4         TestSync test = new TestSync();
 5         Thread t1 = new Thread(test);
 6         Thread t2 = new Thread(test);
 7         t1.setName("t1");
 8         t2.setName("t2");
 9         t1.start();
10         t2.start();
11     }
12     public void run(){
13         timer.add(Thread.currentThread().getName());
14     }
15 }
16 
17 class Timer{
18     static int num = 0;
19     public void add(String name){
20         synchronized(this){
21             num++;
22             try{
23                 Thread.sleep(1);
24             }catch(InterruptedException e){}
25             System.out.println(name+",你是第"+num+"个使用timer的线程");
26         }
27     }
28 }

得到的结果为:

t1,你是第1个使用timer的线程

t2,你是第2个使用timer的线程

 

自己的仿照的代码

 1 public class TestSync{
 2     
 3     public static void main(String args[]){
 4         Runner3 ts1 = new Runner3();
 5         Runner3 ts2 = new Runner3();
 6         Thread t1 = new Thread(ts1);
 7         Thread t2 = new Thread(ts2);
 8         t1.setName("t1");
 9         t2.setName("t2");
10         t1.start();
11         t2.start();
12     }
13 }
14 
15 class Runner3 implements Runnable{
16     Timer timer = new Timer();
17     static int num = 0;
18     public void run(){
19         synchronized(this){
20             num++;
21             try{
22                 Thread.sleep(1);
23             }catch(InterruptedException e){}
24             System.out.println(Thread.currentThread().getName()+",你是第"+num+"个使用timer的线程");
25         }
26     }
27 }

这样运行的结果是:

t1,你是第2个使用timer的线程

t2,你是第2个使用timer的线程

观察马老师的代码,发现在实现Runnable接口后,只new了一个新的对象test(TestSync test = new TestSync();),然后将同一个test传入Thread()中,如果按照我自己的来运行相当于new了两个线程,让两个并发线程调用同一个run()方法.所以要想得到代码一的结果,将

Runner3 ts1 = new Runner3();
Runner3 ts2 = new Runner3();
Thread t1 = new Thread(ts1);
Thread t2 = new Thread(ts2);
改为
Runner3 ts = new Runner3()
Thread t1 = new Thread(ts);
Thread t2 = new Thread(ts);
即可.

java学习记录---synchronized

标签:

原文地址:http://www.cnblogs.com/wsjwin/p/4546275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!