中文JAVA技术平等自由协作创造

Java专题文章博客和开源

常用链接

统计

最新评论

Java多线程中使用synchronized说明

  1.在类中方法上加上
  synchronized关键字,是对整个对象加锁,当一个线程访问带有synchronized的方法时,其他带有synchronized的方法的访问就都会阻塞。
  样例:
  public class ThreadTest {
  public static void main(String[] args) {
  Stu stu = new Stu();
  StuThread1 t1 = new StuThread1(stu);
  t1.start();
  StuThread2 t2 = new StuThread2(stu);
  t2.start();
  }
  }
  class StuThread1 extends Thread {
  Stu stu;
  public StuThread1(Stu stu) {
  this.stu = stu;
  }
  public void run() {
  stu.read1();
  }
  }
  class StuThread2 extends Thread {
  Stu stu;
  public StuThread2(Stu stu) {
  this.stu = stu;
  }
  public void run() {
  stu.read2();
  }
  }
  class Stu {
  public synchronized void read1() {
  System.out.println("read1 begin");
  try {
  Thread.currentThread()。sleep(2000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("read1 end");
  }
  public synchronized void read2() {
  System.out.println("read2 begin");
  try {
  Thread.currentThread()。sleep(2000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("read2 end");
  }
  }
  打印结果为(两个线程是顺序执行的):
  read1 begin
  read1 end
  read2 begin
  read2 end
  如果去掉read2前面的synchronized关键字,打印为(线程出现了交叉执行):
  read1 begin
  read2 begin
  read2 end
  read1 end
  修改read2方法,
  public void read2() {
  synchronized(this)
  {
  System.out.println("read2 begin");
  try {
  Thread.currentThread()。sleep(2000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("read2 end");
  }
  }
  对this进行加锁,结果同一次,线程是顺序执行的托福答案

posted on 2014-05-15 11:35 好不容易 阅读(151) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
PK10开奖 PK10开奖