首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:Java多线程编程中的线程同步Synchronized

Java多线程编程中的线程同步Synchronized

www.jz123.cn  2010-01-13   来源:         我要投递新闻

     Synchronized,顾名思义,代表线程同步。那么,在java编程中如何使用它呢?

  我们首先来看这样一个情况:对于同一个变量synDemo,我们分别在2个不同的线程中调用synDemo.synMethord1()与synDemo.synMethord2()。


 package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */
  public class Tester {public static void main(String[] args) {final SynDemo synDemo = new SynDemo();Thread thread1 = new Thread() {@Overridepublic void run() {// TODO Auto-generated method stub
  super.run();synDemo.synMethord1();}};Thread thread2 = new Thread() {@Overridepublic void run() {// TODO Auto-generated method stub
  super.run();synDemo.synMethord2();}};thread1.start();thread2.start();while (true) {try {Thread.sleep(1000);System.out.println("main");} catch (InterruptedException e) {// TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  }
  我们的SynDemo是这样定义的:
  package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */
  public class SynDemo{public void synMethord1() {while(true) {try {Thread.sleep(1000);System.out.println("synMethord1");} catch (InterruptedException e) {// TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  public void synMethord2() {while(true) {try {Thread.sleep(1000);System.out.println("synMethord2");} catch (InterruptedException e) {// TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  }

  我们的SynDemo对象没有任何特殊的定义,所以运行起来以后的情况如下:


  synMethord2
  synMethord1
  main
  synMethord2
  synMethord1
  main
  synMethord2
  synMethord1

  接下来,我们给synMethord1添加上synchronized声明,运行情况还是与上次一样,因为我们只有一个线程在调用synMethord1的方法。

  我们给synMethord2也添加上synchronized声明,SynDemo对象的代码修改为:

 


 package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */
  public class SynDemo{public synchronized void synMethord1() {while(true) {try {Thread.sleep(1000);System.out.println("synMethord1");} catch (InterruptedException e) {// TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  public synchronized void synMethord2() {while(true) {try {Thread.sleep(1000);System.out.println("synMethord2");} catch (InterruptedException e) {// TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  }

  这个时候,我们再运行程序,结果就不一样了:


 main
  synMethord1
  main
  synMethord1
  main
  synMethord1

上一篇:Java多线程优化之偏向锁原理分析 下一篇:Java Serializable(序列化)的理解和总结

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图