线程
Thread是线程类
currentThread()方法用于获取当前正在运行的线程
getName()方法用于获取线程的名称
main方法运行在main线程中
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
串行与并发
串行执行:多个线程连接成串,然后按照顺序执行
并发执行:多个线程是独立,谁抢到了CPU得执行权,谁就能执行
休眠
Thread.sleep(1000);
线程池
所谓的线程池,其实就是线程对象的容器
可以根据需要,在启动时,创建一个或者多个线程对象
Java有四种比较常见的线程池:
public static void main(String[] args) throws Exception {
// 1. ExecutorService是线程服务对象
// ExecutorService executorService = Executors.newFixedThreadPool(3);
// 2. 根据需求动态创建线程
// ExecutorService executorService = Executors.newCachedThreadPool();
// 3. 单一线程
// ExecutorService executorService = Executors.newSingleThreadExecutor();
// 4. 定时调度线程
ExecutorService executorService= Executors.newScheduledThreadPool(3);
for (int i = 0; i < 5; i++) {
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
}
}
线程同步
wait和sleep
wait | sleep | |
名字 | 等待 | 休眠 |
从属关系 | Object,成员方法 | Thread,静态方法 |
使用方式 | 只使用在同步代码中 | 可以在任意地方使用 |
阻塞时间 | 超时时间(会发生错误) | 休眠时间(不会发生错误) |
同步处理 | 如果执行wait方法,那么其他线程有机会执行当前的同步操作 | 如果执行sleep方法,那么其他线程没有机会执行当前的同步操作 |