我们已经知道同步代码块和同步方法可以保证以原子的方式执行,其实,同步还有另外一个重要概念:内存可见性。换句话说,我们不仅希望防止某个线程正在使用对象状态而另一个线程同时在修改状态,而且希望确保当一个线程修改了对象的状态后,其他线程能够看到修改后的状态。
分类:
编程语言 时间:
2018-05-26 11:41:18
阅读次数:
217
线程通信 一. 传统的线程通信 Object类提供了三个方法由同步监视器调用。分为两种情况 对于使用synchronized修饰的同步方法,因为该类的默认实例(this)就是同步监视器,所以可以在同步方法中直接调用这三个方法。 对于使用synchronized修饰的同步代码块,同步监视器是synch ...
分类:
编程语言 时间:
2018-05-18 21:22:40
阅读次数:
162
1、介绍 Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代 ...
分类:
其他好文 时间:
2018-05-13 13:39:04
阅读次数:
129
线程安全问题: 由于多个线程在操作共享数据,且多条语句对共享数据进行运算,所以产生了多线程安全问题,从而有了同步代码块。 同步的前提: 补充:多次start()同一个线程是非法的。 SimpleDateFormat是不是线程安全的? SimpleDateFormat不是线程安全的。用户应为每个线程创 ...
分类:
编程语言 时间:
2018-05-11 20:42:38
阅读次数:
188
死锁:就是同步方法中有同步代码块,或反之。 例子: 同步锁synchronized和互斥锁ReentrantLock的区别: 例子: synchronized和Lock的区别: Lock中可以自己控制锁是否公平,而且,默认的是非公平锁。 1.两种锁的底层实现方式: synchronized:我们知道 ...
分类:
编程语言 时间:
2018-05-11 20:13:45
阅读次数:
230
一个对象是否需要是线程安全的取决于它是否被多个线程访问。 当多个线程访问同一个可变状态量时如果没有使用正确的同步规则,就有可能出错。解决办法: 不在线程之间共享该变量 将状态变量修改为不可变的 在访问状态变量时使用同步机制 完全由线程安全类构造的程序也不一定是线程安全的,线程安全类中也可以包含非线程 ...
分类:
编程语言 时间:
2018-05-11 17:16:04
阅读次数:
198
1.代码块 * A:代码块概述 * 在Java中,使用{}括起来的代码被称为代码块。* B:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块* C:常见代码块的应用 * a:局部代码块(只要是和局部有关系的,都是和方法有关系的) * 在方法中出现;限定变 ...
分类:
其他好文 时间:
2018-05-07 19:40:28
阅读次数:
133
一 . 概念 我们使用多个线程的时候,我们需要线程运行之间按照一定的顺序运行下去,这个就需要线程之间的通信. 二 .例子 我们使用经典的生产者和消费者模式演示一下. 我们创建了两个线程,一个生产产品,另外一个线程消费产品. 我们使用了wait()方法和notify()方法发送信号量,实现线程之间的同 ...
分类:
编程语言 时间:
2018-04-29 16:56:45
阅读次数:
181
* A:代码块概述 * 在Java中,使用{}括起来的代码被称为代码块。 * B:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。 * C:常见代码块的应用 * a:局部代码块 * 在方法中出现;限定变量生命周期,及早释放,提高内存利用率 ...
分类:
编程语言 时间:
2018-04-21 17:30:48
阅读次数:
211
进程:正在进行的程序。其实就是一个应用程序运行时的内存分配空间。 线程:进程中一个程序执行控制单元,一条执行路径。进程负责的事应用程序的空间的标识,线程负责的事应用程序的执行顺序。 进程和线程的关系:一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程 ...
分类:
编程语言 时间:
2018-04-17 21:18:53
阅读次数:
145