Java多线程学习笔记
来源:互联网 发布:淘宝一元拍卖骗局揭秘 编辑:程序博客网 时间:2024/04/28 02:24
一、Java多线程基础:参考:Java多线程系列目录(共43篇)
1、Java创建线程的方式有两种:实现Runnable接口或直接继承Thread类;
2、通过重写run()方法来自定义自己的线程;通过执行start()方法来执行创建的进程;通过执行wait()方法来使当前进程(指当前在CPU上运行的线程)阻塞(当前进程必须拥有该对象的同步锁), wait()方法被调用后当前线程将变为阻塞,并释放该对象的同步锁,以便持有该对象的同步锁的其它进程执行(如notifyAll)。
3、interrupt()方法并不会立即终止正在运行的线程,而是将此线程的中断标记设为True,即通过isInterrupted()可返回true。若线程处于阻塞状态,此时调用其interrupt()方法,会立即将中断标记设为True,但是由于线程处于阻塞状态,所以该中断标记会立即被清除为false,同时会抛出一个InterruptedException。interrupted() 和 isInterrupted()都能够用于检测对象的“中断标记”。区别是, interrupted()除了返回中断标记之外,它还会清除中断标记(即将中断标记设为false);而isInterrupted()仅仅返回中断标记。
4、join()方法会调用wait()方法来阻塞当前进程,直至子线程执行完成以后,当前进程才会继续执行。
5、sleep()的作用同wait()方法作用类似,但唯一的区别是:sleep()不会释放锁,且调用sleep()时当前进程也无需拥有该对象的同步锁。
二、Java 线程池,参考:JAVA线程池的分析和使用,Java doc
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
举例:
可缓存线程池:ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
定长线程池,控制最大并发数:ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
定长线程池,支持定时任务:ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
单线程化线程池:ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
- Java多线程学习笔记
- Java多线程学习笔记
- Java学习笔记---多线程
- java多线程学习笔记
- Java多线程学习笔记
- Java多线程学习笔记
- JAVA多线程学习笔记
- Java 多线程学习笔记
- java多线程学习笔记
- Java多线程学习笔记
- [学习笔记]Java多线程
- java多线程学习笔记
- Java多线程学习笔记
- Java学习笔记-多线程
- Java多线程学习笔记
- Java多线程学习笔记
- Java多线程学习笔记
- Java 多线程学习笔记
- 基于MINA框架快速开发网络应用程序
- java:生成文件目录,并在文件目录下生成文件
- Mina框架传递对象
- OS多线程的初步研究(九)-- dispatch源
- Mina框架传递对象
- Java多线程学习笔记
- iOS多线程的初步研究(十)-- dispatch同步
- struts2 实现分页
- 网段的简单划分
- 查询一些开源项目的网站
- stringToInt
- RabbitMQ基础
- 037(冒泡)
- Selenium如何对iframe中的元素进行操作