没有合适的资源?快使用搜索试试~ 我知道了~
线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。 每个程序都至少拥有一个线程-即作为Java虚拟机(JVM)启动参数运行在主类main方法的线程。在Java虚拟机初始化过程中也可能启动其他的后台线程。这种线程的数目和种类因JVM的实现而异。然而所有用户级线程都是显式被构造并在主线程或者是其他用户线程中被启动。
资源推荐
资源详情
资源评论
2
SimpleDateFormat -> JodaTime
ArrayList,HashSet,HashMap等Coleections
先检查再执⾏
4、线程安全-同步容器
ArrayList -> Vector,Stack
HashMap -> HashTable
Collections.synchronizedXXX(List,Set,Map)
遍历集合的时候尽量不要remove操作
5、线程安全 - 并发容器J.U.C
ArrayList -> CopyOnwriteArrayList
HashSet、TreeSet -> CopyOnwriteArrayList、ConcurrentSkipListSet
HashMap、TreeMap -> ConcurrentHashMap、ConcurrentSkipListMap
6、J.U.C拓展
Callable、Future和FutureTask
ForkJoin
BlockingQueue
AQS
1、AQS同步组件
CountDownLatch
Semaphore(信号量)
CyclicBarrier
ReentrantLock
Condition
线程池
为什么要⽤线程池
new Thread 弊端
线程池的好处
线程池类图
ThreadPoolExecutor
Daemon(守护线程)
多线程并发总结
最佳实践
4
Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第⼀个是 JVM 实现的 synchroniz ed,
⽽另⼀个是 JDK 实现的 Reentrant Lock。
同步⼀个代码块
它只作⽤于同⼀个对象,如果调⽤两个对象上的同步代码块,就不会进⾏同步。对于以下代码,使⽤
ExecutorService 执⾏了两个线程,由于调⽤的是同⼀个对象的同步代码块,因此这两个线程会进⾏同
步,当⼀个线程进⼊同步语句块时,另⼀个线程就必须等待。
同步⼀个⽅法
互斥同步
1、synchronized
public void func() {
synchronized (this) {
// ...
}
}
public static void m ain(String[] args) {
SynchronizedExam ple e1 = new SynchronizedExam ple();
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(() -> e1.func1());
executorService.execute(() -> e1.func1());
}
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
5
它和同步代码块⼀样,作⽤于同⼀个对象。
同步⼀个类
作⽤于整个类,也就是说两个线程调⽤同⼀个类的不同对象上的这种同步语句,也会进⾏同步。
public synchronized void func () {
// ...
}
public void func() {
synchronized (SynchronizedExam ple.class) {
// ...
}
}
public class SynchronizedExam ple {
public void func2() {
synchronized (SynchronizedExam ple.class) {
for (int i = 0; i < 10; i++) {
System .out.print(i + " ");
}
}
}
}
public static void m ain(String[] args) {
SynchronizedExam ple e1 = new SynchronizedExam ple();
SynchronizedExam ple e2 = new SynchronizedExam ple();
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(() -> e1.func2());
executorService.execute(() -> e2.func2());
}
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
剩余38页未读,继续阅读
资源评论
进朱者赤
- 粉丝: 2126
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功