多线程
文章平均质量分 54
逍遥不羁
这个作者很懒,什么都没留下…
展开
-
java中volatile关键字的含义
转载:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchron转载 2016-09-26 18:04:06 · 327 阅读 · 0 评论 -
java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例
1、CountDownLatch:一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。2、ThreadPoolExecutor/ExecutorService:线程池,使用线程池可以复用线程,降低频繁创建线程造成的性能消耗,同时对线程的创建、启动、停止、销毁等操作更简便。3、使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点到公司门口集合,统一乘坐公司所租大巴原创 2017-01-25 15:18:23 · 14397 阅读 · 0 评论 -
java多线程CyclicBarrier使用示例,让线程起步走
1、CyclicBarrier:一个同步辅助类,用于协调多个子线程,让多个子线程在这个屏障前等待,直到所有子线程都到达了这个屏障时,再一起继续执行后面的动作。2、使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点【自驾车】到公司门口集合,然后【自驾车】前往目的地。 在这个案例中,公司作为主线程,员工作为子线程。3、代码示例;package com.test.spring.suppo原创 2017-01-25 17:20:32 · 3859 阅读 · 1 评论 -
一个请求方法是一个线程吗?不是!
之前对于线程和方法的理解有些偏差,竟稀里糊涂的认为一个线程就是一个方法,一个方法就是一个线程。尤其在理解ThreadLocal执行原理的时候,更是晕乎 (ThreadLocal把当前线程作为key,来维护管理一个可变的对象,在某一个方法里面set值,在后面的某个方法调用里面get值,如果一个方法就是一个线程,那set和get使用的key就不是同一个了,set进去的值get是拿不出来了) 现在原创 2017-03-02 10:27:35 · 19729 阅读 · 4 评论 -
深入理解线程本地变量ThreadLocal
ThreadLocal理解:如果在多线程并发环境中,一个可变对象涉及到共享与竞争,那么该可变对象就一定会涉及到线程间同步操作,这是多线程并发问题。否则该可变对象将作为线程私有对象,可通过ThreadLocal进行管理,实现线程间私有对象隔离的目的。可以发现,ThreadLocal并没有解决多线程并发的问题,因为ThreadLocal管理的可变对象的性质本来就不会涉及到多线程并发而引发的共享、竞争和同原创 2017-02-28 15:45:00 · 5066 阅读 · 0 评论 -
java多线程Future、FutureTask使用示例,返回异步的结果
1、Future、FutureTask介绍Future是一个接口,该接口用来返回异步的结果。FutureTask是一个类,是Future 的一个实现。2、主要方法future.get();或者future.get(10000, TimeUnit.MILLISECONDS);获取多线程异步执行结果,但get方法是一个同步方法,如果未拿到结果或者未超时,主线程则一直等待。future.cancel(原创 2017-02-07 14:37:59 · 15730 阅读 · 0 评论 -
java多线程Semaphore使用实例,细化粒度控制并发数量
1、Semaphore:线程协同类,用来控制线程并发数量,并且可以更加细粒度的进行控制,因为真正被控制最大并发的代码放到了acquire和release之间。2、主要方法://初始值 count 表示当前的信号量当前所允许访问的线程数Semaphore semaphore = new Semaphore(int count);semaphore.acquire(); 是获得一个原创 2017-02-07 11:33:22 · 2850 阅读 · 0 评论 -
本地局部变量ThreadLocal的使用
使用ThreadLocal类型变量初始化的方式:第一个方式为在线程执行方法run()里,变量显示调用set()方法,为该变量赋值;第二个方式为使用匿名内部类的方式,重写ThreadLocal的initialValue()进行初始化。原因:1、initialValue()方法默认返回值为null2、线程启动后,如果方法中使用了ThreadLocal类型变量,调用get()方法获取变量值,原创 2015-05-21 20:09:03 · 669 阅读 · 0 评论 -
java多线程自问自答
问题1:每一个方法都是一个线程,那为什么还需要使用线程类启动线程呢?回答:因为不使用线程类启动的线程,例如主方法中引入多个方法,程序都是按照顺序执行的,任意一个方法未执行结束,都无法向下继续执行;而使用线程类启动的线程,例如在主方法中启动了一个线程,此时,该线程与主方法共同争抢CPU资源,谁抢到谁执行,属于并发并发使用的意义:多个线程对共享资源的使用和控制问原创 2015-05-21 20:12:44 · 472 阅读 · 0 评论 -
Java多线程-线程的同步与锁
一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。package cn.thread;public class Foo { private int x = 100; public int getX() { return x; }转载 2016-11-21 14:57:38 · 363 阅读 · 1 评论 -
Java并发编程:volatile关键字解析
转载:http://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 vo转载 2016-09-26 18:09:34 · 418 阅读 · 0 评论 -
Java不可变类机制
不可变类(Immutable Class):所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类(Mutable Class):相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。不可变类的特性对Java来说带来怎样的好处?1)线程安全:不可变对象是线程安全的,在线转载 2017-03-03 16:29:30 · 574 阅读 · 0 评论