- *线程的状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated
new Thread()——> New、 start()——> Runnable、 等待资源——>Blocked、wait()——> waiting 等
- 锁:ReentrantLock, 条件对象:Condition
- *synchronized
每个Object对象都有一个内部锁,synchronized关键字实际使用的就是内部锁,直接使用的wait()方法实际使用的是对象内部锁的条件。
wait()——notifyAll——notify 对应 Condition.await()——Condition.signalAll()——Condition.signal()
synchronized(obj){……} 获取的是obj的内部锁
-
*Volatile
-
修饰变量可见性,即主内存和工作内存同步
-
阻止相关字节码重排序
-
new ThreadLocal
- tryLock() 申请一个锁,成功返回true,否则立即返回false。可以传入超时参数
- ReentrantReadWriteLock 读写锁,多线程读,少线程写很有用。拆分成读锁 readLock()和写锁writeLock()使用。
- 阻塞队列 通过队列的方式分成生产线程和消费线程
- java.util.concurrent 包中包含线程安全的集合,例如ConcurrentHashMap、ConcurrentLinkedQueue等
- *Callable and Future
Callable 区别于Runnable, 其可以返回计算结果Future对象,也可以抛出异常。
可以用 FutureTask包装Callable接口的对象,即
Callable<integer> myComputation = ...;
FutureTask<integer> task = new FutureTask<integer>(myComputation);
Thread t = new Thread(task);
t.start();
....;
Integer result = task.get();</integer></integer></integer>
- *线程池
Executor类工厂方法 :
newCachedThreadPool() 必要时创建新线程,空闲线程保留60秒 newFixedThreadPool() 该池包含固定数量的线程,空闲线程会一直保留 newSingleThreadExecutor() 只有一个线程的池,顺序执行每一个提交的任务 newScheduledThreadPool 用于预定执行而构建的固定线程池,代替java.util.Timer newSingleThreadScheduledExecutor() 用于预定执行而构建的单线程池
前三个返回实现了ExecutorService接口的ThreadPoolExecutor对象,使用submit(Runnable)或submit(Callable)提交任务
后两个返回实现ScheduledExecutorService接口的对象,可以定时或周期执行任务。
- 控制任务组 ExecutorCompletionService
- *Fork-Join框架
Original: https://www.cnblogs.com/lostO/p/16744416.html
Author: 迷路的圆
Title: java 多线程
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620296/
转载文章受原作者版权保护。转载请注明原作者出处!