Java多线程
文章平均质量分 51
Tailyou
这个作者很懒,什么都没留下…
展开
-
【Java多线程】-线程同步synchronized和volatile
前言1) 多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。 2)程序的主内存是多个线程共享的,每个线程都有自己的工作内存,工作内存中存储了主内存某些对象的副本。 3)原子性:系统提供的原子性操作包括:lock,unlock,read,load,use,assign,store,write。 4)线程操作共享变量的执行顺序第一步:read,load,将共享变量加载到原创 2015-09-11 20:26:23 · 590 阅读 · 0 评论 -
【Java多线程】-Condition使用(生产者-消费者)
首先看一个使用Condition的简单示例package org.iti.thread;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.conc原创 2015-09-17 08:48:03 · 516 阅读 · 0 评论 -
【Java多线程】-原子类型-java.util.concurrent.atomic
前言在JDK5新增的并发包中有这样一个包:java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。Compare And SwapCAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。其操作过程如下: CPU 会原创 2015-09-17 11:25:00 · 445 阅读 · 0 评论 -
【Java多线程】-读写锁ReadWriteLock
大家可能遇到这样的情况:在读写共享数据时,要求写入与写入互斥,读取与写入互斥,而读取和读取不要求互斥。我相信大家都知道需要加锁来实现互斥,但是普通的锁能达到我么的要求吗?我们来看看下面的代码:package org.iti.thread;import java.util.Random;public class ThreadReadWriteLock { public static void原创 2015-09-16 16:54:37 · 565 阅读 · 0 评论 -
【Java多线程】-线程中断
涉及到线程终端的方法有以下三个:public voidinterrupt ():将线程的中断状态设置为true;public static boolean interrupted():判断当前线程的中断状态;public boolean isInterrupted():判断某个线程的中断状态package org.iti.thread;原创 2015-09-12 09:30:10 · 398 阅读 · 0 评论 -
【Java多线程】-Timer,TimerTask,ScheduledExecutorService
Timer和TimerTaskTimerTask是一个抽象类,实现了Runnable接口,所以它具备了多线程的能力; Timer可以看成是一个定时器,用于调度TimerTask执行,一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度。Timer源码:public class Timer { /** * The timer task原创 2015-09-12 10:56:45 · 712 阅读 · 0 评论 -
【Java多线程】-ReentrantLock
ReentrantLock 简介java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock 的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加原创 2015-09-16 16:12:27 · 447 阅读 · 0 评论 -
【Java多线程】-线程池
创建线程池使用线程池处理多线程可以节约资源,以更小的开销做更多的事,从而提高性能。自JDK5之后,Java推出了一个并发包,java.util.concurrent,接下来咱们看看在Java并发包下如何创建线程池。 // 创建可重用-固定线程数目的线程池 ExecutorService fixedThreadPool = Executors.newFixedThread原创 2015-09-12 15:24:44 · 448 阅读 · 0 评论 -
【Java多线程】-生产者与消费者
场景:有一个盘子,最多可放4个苹果。生产者往盘子里放苹果,若盘子满则生产者等待,否则放入一个苹果,并通知消费者消费;消费者从盘子里取走苹果,盘子空消费者等待,否则取走一个苹果,并通知生产者可以继续放苹果。package org.iti.thread;import java.util.ArrayList;import java.util.List;public class ThreadDemo原创 2015-09-11 21:37:10 · 527 阅读 · 0 评论 -
【Java多线程】-Callable,Future,FutureTask
一、Callable与Runnable的区别1)Runnable是一个接口,里面只申明了一个run()方法,run()方法的返回值为void类型,因此,任务执行完后不会返回任何结果。public interface Runnable { public abstract void run();}2)Callable也是一个接口,里面也只申明了一个方法call(),该方法的返回值类型为一个泛型原创 2015-09-14 10:27:17 · 459 阅读 · 0 评论