![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Neil Parker
有人的地方就有江湖
展开
-
Java内存模型:volatile关键字深度解析
volatile关键字保证1.可见性和2.一定的有序性,不保证原子性。volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与...原创 2018-03-07 18:24:47 · 286 阅读 · 1 评论 -
Java并发编程指南(四):线程执行者
1. 创建一个线程执行者:使用Executor framework的第一步就是创建一个ThreadPoolExecutor类的对象。你可以使用这个类提供的4个构造器或Executors工厂类来 创建ThreadPoolExecutor。有了执行者,你就可以提交Runnable或Callable对象给执行者来执行。一个模拟web服务器的示例:// 1.首先,实现能被服务器执行的任务。创建实现Runn...原创 2018-03-12 17:42:16 · 285 阅读 · 0 评论 -
Java并发编程指南(三):线程同步工具
1. 控制并发访问资源Semaphore:Semaphore是一个控制访问多个共享资源的计数器。当一个线程想要访问某个共享资源,首先,它必须获得semaphore。如果semaphore的内部计数器的值大于0,那么semaphore减少计数器的值并允许访问共享的资源。计数器的值大于0表示,有可以自由使用的资源,所以线程可以访问并使用它们。另一种情况,如果semaphore的计数器的值等于0,那么s...原创 2018-03-12 11:21:13 · 208 阅读 · 0 评论 -
Java并发编程指南(二):基本线程同步
1. 同步方法:synchronized关键字:只有一个执行线程将会访问一个对象中被synchronized关键字声明的方法。如果另一个线程试图访问同一个对象中任何被synchronized关键字声明的方法,它将被暂停,直到第一个线程结束方法的执行。换句话说,每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。静态方法有不同的行为。只有一个执行线程...原创 2018-03-11 22:52:53 · 170 阅读 · 0 评论 -
Java并发编程指南(七):定制并发类
1,定制ThreadPoolExecutor类执行者框架(Executor framework)是一种机制,允许你将线程的创建与执行分离。它是基于Executor和ExecutorService接口及其实现这两个接口的ThreadPoolExecutor类。它有一个内部的线程池和提供允许你提交两种任务给线程池执行的方法。这些任务是:Runnable接口,实现没有返回结果的任务Callable接口,...原创 2018-03-17 13:33:27 · 213 阅读 · 0 评论 -
Java并发编程指南(一):线程管理
1. 线程的创建和运行:在Java中,我们有2个方式创建线程:通过直接继承Thread类,然后覆盖run()方法。构建一个实现Runnable接口的类, 然后创建一个thread类对象并传递Runnable对象作为构造参数2.获取和设置线程信息:Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程,知道它的状态,调整控制其优先级。 这些属性是:ID: 每个线程的独特标识。Name:...原创 2018-03-11 14:55:47 · 239 阅读 · 0 评论 -
Java并发编程指南(六):并发集合
1. 非阻塞线程安全的列表 ConcurrentLinkedDeque并发列表允许不同的线程在同一时刻对列表的元素进行添加add()或删除pollFirst(),pollLast(),而不会产生任何数据不一致(问题)。add(), addFirst(), addLast(): 这些方法允许在列表的头部或者尾部插入一个元素。如果没有可用空间将会抛出异常。poll(), pollFirst()和pol...原创 2018-03-15 17:41:19 · 301 阅读 · 0 评论 -
Java并发编程指南(五):Fork/Join框架
这个框架被设计用来解决可以使用分而治之技术将任务分解成更小的问题。在一个任务中,检查你想要解决问题的大小,如果它大于一个既定的大小,把它分解成更小的任务,然后用这个框架来执行。这个框架基于以下两种操作:fork操作:当你把任务分成更小的任务和使用这个框架执行它们。join操作:当一个任务等待它创建的任务的结束。work-stealing算法:当一个任务正在等待它使用join操作创建的子任务的结 束...原创 2018-03-14 19:25:29 · 260 阅读 · 0 评论 -
java多线程编程基础
一、进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)...原创 2018-03-05 21:05:26 · 226 阅读 · 0 评论