线程的同步互斥

线程互斥与同步通信


 

1.线程安全问题——》银行转账问题
2.关于Synchronized
实现线程的原子性,需要把某段代码保护起来,

1 int len = name.length();
2   synchronized (name) { //this也可以,就省的写变量名了
3   //Outputer.class在括号中使用时,就是当内部类中存在了静态构造方法,为了两者的同步,使用
4   for (int i = 0; i < len; i++) {
5   name.charAt(i);
6   }
7   System.out.println(name);
8   }

只有这样,在线程调用该方法时,就不会出现混乱执行语句。
注意:还有一个方法就是直接在方法名上加sychronized ,在一段代码中最好只用一次,如果在方法名上加了sychronized,在方法体中也用了sychronized ,就会出现死锁。

 

要用到共同的数据(包括同步锁)或者共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了高类聚和程序的健壮性

Lock比传统线程模型中的synchronized 方式更加面向对象,锁本身也是一个对象。两个线程执行的代码要是先同步互斥的效果,他们必须用同一个lock对象。同步的代码是放在资源内部的,不是放在线程中的。

 

posted @ 2019-01-21 10:12  loveHawin  阅读(232)  评论(0编辑  收藏  举报