#并发

20、Java并发性和多线程-Slipped Conditions

以下内容转自http://ifeve.com/slipped-conditions/:所谓Slippedconditions,就是说,从一个线程检查某一特定条件到该线程操作此条件期间,这个条件已经被其它线程改变,导致第一个线程在该条件上执行了错误的操作。这里有一个简单的例子:publicclassLock{privat...

19、Java并发性和多线程-嵌套管程锁死

以下内容转自http://ifeve.com/nested-monitor-lockout/:嵌套管程锁死类似于死锁,下面是一个嵌套管程锁死的场景:线程1获得A对象的锁。线程1获得对象B的锁(同时持有对象A的锁)。线程1决定等待另一个线程的信号再继续。线程1调用B.wait(),从而释放了B对象上的锁,但仍然持有对象A...

18、Java并发性和多线程-饥饿与公平

以下内容转自http://ifeve.com/starvation-and-fairness/:如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性”–即所有线程均能公平地获得运行机会。&...

17、Java并发性和多线程-避免死锁

以下内容转自http://ifeve.com/deadlock-prevention/:在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:加锁顺序当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子:Thre...

16、Java并发性和多线程-死锁

以下内容转自http://ifeve.com/deadlock/:死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B...
代码星球 代码星球·2021-02-19

13、Java并发性和多线程-Java Volatile关键字

以下内容转自http://tutorials.jenkov.com/java-concurrency/volatile.html(使用谷歌翻译):Java volatile关键字用于将Java变量标记为“存储在主存储器”中。更准确地说,这意味着,每个读取volatile变量将从计算机的主存储器中读取,而不是从...

6、Java并发性和多线程-并发性与并行性

以下内容转自http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html(使用谷歌翻译):术语并发和并行性通常用于多线程程序。但是,并发和并行性究竟是什么意思呢,它们是相同的术语还是什么?简短的答案是“不”。它们不是相同的术语,...
代码星球 代码星球·2021-02-19

5、Java并发性和多线程-相同线程

以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译):相同线程(同一线程)是一种并发模型,其中单线程系统扩展到N个单线程系统。结果是并行运行的N个单线程系统。同一个线程系统不是一个纯粹的单线程系统,因为它包含多个线程...
代码星球 代码星球·2021-02-19

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/:Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有一个指向同一个ThreadLocal变量的引用,但是这两个线程依然不能看到彼此的ThreadLo...

15、Java并发性和多线程-线程通讯

以下内容转自http://ifeve.com/thread-signaling/:线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。1、通过共享对象通信线程间发送信号的一个简单方式是在共享对象的变量里设置...
代码星球 代码星球·2021-02-19

12、Java并发性和多线程-Java同步块

以下内容转自http://ifeve.com/synchronized-blocks/:Java同步块(synchronizedblock)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块...

11、Java并发性和多线程-Java内存模型

以下内容转自http://ifeve.com/java-memory-model-6/:Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重...

10、Java并发性和多线程-线程安全与不可变性

以下内容转自http://ifeve.com/thread-safety-and-immutability/:当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从...

9、Java并发性和多线程-线程安全与共享资源

以下内容转自http://ifeve.com/thread-safety/:允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个...

8、Java并发性和多线程-静态条件与临界区

以下内容转自http://ifeve.com/race-conditions-and-critical-sections/:在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,webservices等)或文件。实际上,这些问题只有在一或多个线程...
首页上一页12345...下一页尾页