synchronized 是内置锁,而Lock 接口定义的是显示锁,Lock 提供了一种可重入的、可轮询的、定时的以及可中断的锁获取操作。 ReenTranLock实现了Lock接口,并提供了与synchronized 相同的互斥性和内存可见性。在获取ReentranLock时,有着与进入同步代码块 ...
分类:
编程语言 时间:
2017-11-18 21:03:40
阅读次数:
201
绿色箭头处会出现安全隐患: 线程安全解决方式一:同步代码块 线程安全解决方法二:同步函数 ...
分类:
编程语言 时间:
2017-11-11 17:39:06
阅读次数:
167
问题描述 使用synchronized在一个非final对象上加了锁之后,在synchronized体(同步代码块)中,将该对象的值(状态)改变之后,会导致线程不安全,即其他线程会拿到改变之后对象的锁,从而进入同步代码块。 场景设计 场景说明 两个线程a1,a2,访问同一个AAA对象aaa(临界资源 ...
分类:
编程语言 时间:
2017-11-01 18:51:04
阅读次数:
167
java线程 同步与异步 线程池 1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺 ...
分类:
编程语言 时间:
2017-10-29 12:49:40
阅读次数:
162
1:线程(理解) (1)死锁 概念: 同步中,多个线程使用多把锁之间存在等待的现象。 原因分析: a.线程1将锁1锁住,线程2将锁2锁住,而线程1要继续执行锁2中的代码,线程2要继续执行锁1中的代码, 但是此时,两个锁均处于锁死状态。最终导致两线程相互等待,进入无限等待状态。 b.有同步代码块的嵌套 ...
分类:
编程语言 时间:
2017-10-08 18:11:02
阅读次数:
198
1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。 2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/noti ...
分类:
编程语言 时间:
2017-10-06 13:54:09
阅读次数:
234
多线程案例 一个模拟的买票系统,使用num表示车票的数量: public class TicketCounter implements Runnable{ private int num = 5; @Override public void run() { //因为while(true)所以可以多次 ...
分类:
编程语言 时间:
2017-09-27 16:18:58
阅读次数:
272
synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选。 下面总结其特性以及使用技巧,加深对其理解。 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 2. 当一个线程同时访问object的一个 ...
分类:
编程语言 时间:
2017-09-20 14:26:36
阅读次数:
172
1、复合操作 若一个类里有多个属性状态,对每个属性使用atomic类修饰,并且一个属性更新,要在同一原子操作内更新其他所有属性,这样才是线程安全类。需要整体类的状态操作是原子的。 要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。 判断同步代码块的合理大小,要权衡安全性、简单性和性能 ...
分类:
编程语言 时间:
2017-09-17 15:14:44
阅读次数:
162
多线程通信 1.概述:多个线程处理同一个资源,但是各自的任务不相同eg:线程1负责存储数据,线程2负责处理该数据。数据--就是同一个资源怎样用java语言描述上面的例子:* 资源是变化的--数据是变化的--将其封装为对象* 存在两个任务不同的线程,需要2个run方法--所以封装在两个不同的线程类中* ...
分类:
编程语言 时间:
2017-09-17 13:37:16
阅读次数:
197