线程并发四:线程安全之synchronized
来源:互联网 发布:小学生网络教学 编辑:程序博客网 时间:2024/06/05 06:26
关键字synchronized 的作用是实现线程间的同步,他的工作是对同步的代码加锁,使得每一次,只能有一个线程进入同步块,从而保证线程间的安全性。
关键字synchronized可以有多种用法。这里做简单的整理
a.指定加锁对象
b.直接作用于实例方法
c.直接作用于静态方法
用法很简单,这里就不举例说明了,下面列举一个很常见的错误同步用法
import java.util.Date;public class SyncThreadTest implements Runnable { public synchronized void sayHello(){ System.out.println("[" + new Date().getTime() + "]" + Thread.currentThread().getName() + ": say hello!!"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run(){ while(true){ sayHello(); } } public static void main(String[] args){ Thread t1 = new Thread(new SyncThreadTest(),"test1"); Thread t2 = new Thread(new SyncThreadTest(),"test2"); t1.start(); t2.start(); }}
可以看出两个线程指向了不同的Runable实例,换而言之,两个线程使用了两把不同的锁,因此无法保证线程安全。
但是我们只需简单的修改,就可以正确运行,那就是直接作用于静态方法,这样修改之后,两个线程请求的锁则变为当前类的锁,而非实例的锁。
public static synchronized void sayHello(){ System.out.println("[" + new Date().getTime() + "]" + Thread.currentThread().getName() + ": say hello!!"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
阅读全文
0 0
- 线程并发四:线程安全之synchronized
- java并发编程:线程安全-线程同步-synchronized和lock
- Java 并发之线程安全
- 线程并发五:线程安全之重入锁
- java并发编程-线程同步之synchronized
- 线程安全,线程同步,synchronized
- synchronized ReentrantLock 线程安全
- synchronized 线程同步安全
- 【Java】 线程安全 synchronized
- Synchronized和线程安全
- 并发容器ConcurrentHashMap与synchronized联合使用达到线程安全
- java线程安全之synchronized同步代码块解决脏读问题(四)
- java并发编程基础之线程安全
- 并发编程之线程安全HashMap_ConcurrentHashMap
- java并发:线程安全
- 并发4-线程安全
- java-并发-线程安全
- java-并发-线程安全
- Ubuntu
- c语言中的#号和##号的作用
- sql转Linq
- Python基础
- C语言基础 递归
- 线程并发四:线程安全之synchronized
- A configuration error occurred during startup.Please verify the preference field with the prompt: To
- Tableview添加索引
- 基于轮廓线索(Contour Cues)的实时行人检测
- 4基于opencv的线性领域滤波(方框_均值_高斯滤波)
- form转json
- java行为设计模式——策略模式
- orcl中查询两个时间的差值(包括时分秒)
- Android引入外部工程作为library,运行主工程报错Manifest merger failed with multiple errors, see ?