在Java多线程编程中有时候会遇见线程本地局部变量ThreadLocal这个类,下面就来讲讲ThreadLocal的使用及源码分析。
ThreadLocal 是Thread Local Varial(线程局部变量)的意思,每个线程在使用线程局部变量的时候都会为使用这个线程局部变量的线程提供一个线程局部变量的副本,使得每个线程都可以完全独立地操作这个线程局部变量,而不会与其他线程发生冲突,从线程的角度来看,每个线程都好像独立地拥有了这个线程局部变量。这样,看似每个线程都在并发访问同一个资源(线程...
分类:
编程语言 时间:
2016-05-27 13:04:45
阅读次数:
289
推荐高洪岩的《Java多线程编程核心技术》,虽然很多代码都是纯粹为了炫耀技术,但看完之后再也不怕被多线程问倒了 随笔提一句,前面看了那多章同步代码块的内容,后面却发现lock完全可以取代。这本书在我看来可以砍掉一半,直接用Lock就好了。 问题1:用Java写代码来解决生产者——消费者问题。 使用l ...
分类:
编程语言 时间:
2016-05-20 00:55:13
阅读次数:
175
在多个线程同时运行时,就存在多个线程之间的调度控制、资源分配等。本节就来讲解线程使用中的一系列控制命令和使用方法线程的启动start()、join()与停止stop()线程的休眠sleep()、挂起yield线程的同步synchronized线程的同步锁机制:wait()、notify()和notifyAll()start()启动..
分类:
编程语言 时间:
2016-05-16 17:53:13
阅读次数:
169
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个名为run()的无参数方法。voidrun().此外,Runnable为非Thread子类提供了一种激活方式。通过实例化某个Thread实例并将自身作为运行目标,就可以运行实现Runnable的类而无须创建Thread的子类。4、定..
分类:
编程语言 时间:
2016-05-13 17:33:14
阅读次数:
201
6、使用线程池ExecuteService线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到多个任务上。其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样就可以立即为请求服务,使应用程..
分类:
编程语言 时间:
2016-05-13 17:24:29
阅读次数:
236
以下内容主要总结自《Java多线程编程核心技术》,不定时补充更新。 一、线程的状态 Java中,线程的状态有以下6类:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED。各状态之间的关系可用下图表示: 二、常用方法介绍 1、threa ...
分类:
编程语言 时间:
2016-05-13 12:24:25
阅读次数:
247
多线程编程的含义:将程序任务分成几个并行的子任务,特别是在网络编程中,很多功能都是要并发执行的。本节课将从线程的概念、开发方法及运行来讲解。线程的概念:包括进程和线程的区别、线程的概念、运行状态和优先级线程的开发方法:继承Thread和实现Runnable、定时器TimberT..
分类:
编程语言 时间:
2016-05-13 04:59:23
阅读次数:
270
1、实现生产者/消费者模式:一对一交替打印
public class MyService {
private ReentrantLock lock= new ReentrantLock();
private Condition condition = lock.newCondition();
private boolean hasValue = false;
p...
分类:
编程语言 时间:
2016-05-13 03:33:38
阅读次数:
271
公平与非公平锁:锁Lock分为“公平锁”和“非公平锁”,公平锁表示线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的FIFO先进先出顺序。而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,和公平锁不一样的就是先来的不一定先得到锁,这个方式可能造成某些线程一直拿不到锁,结果也就是不公平的了。
1、公平锁实例
public class Service {
private Re...
分类:
编程语言 时间:
2016-05-13 03:08:01
阅读次数:
139
定时/计划功能在移动开发领域使用较多,比如Android技术。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联的。
在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。
Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类
执行计划...
分类:
编程语言 时间:
2016-05-13 01:53:28
阅读次数:
185