1.概念
进程数:运行中的应用,一个进程中至少有一条线程
线程数:CPU进行任务调度的基本单位。(时间片)
线程的态:
新生:new born Thread t1=new Thread(Runnable task);
就绪:ready t1.start();
运行:running 阻塞
sleep(int millisecs)
wait([int millisecs])
notify()
notifyAll()
死亡:dead
句柄数:交互类组件在当前系统下的身份识别码
2.语法
java.lang.Thread
java.util.concurrent.* (线程安全)
//面向小型任务
Runnable task=()->{...};
Thread t1=new Thread(Runnable|MyRunnable task);
Thread t1=new Thread(()->{});
//大任务
class MyThread extends Thread{ . . .}
class MyRunnable implement Runnable{...}
//线程的方法
mt.start();#启动线程
mt.join();#强制等待当前线程执行结束
Thread.sleep(int millisecs);#线程休眠
//线程锁
//同步代码块:同一时间只有一条线程能够获取lock
synchronized(Object lock){
if(条件){
lock.wait();
}else{
...
lock.notify();#只有两条线程
lock.notifyAll();#两条以上的线程
}
}
/同步方法:锁对象为当前对象(this)
//静态同步方法:锁对象为当前类型(A.class)
//线程池
//小任务:线程的数量不设上限
ExecutorService poolOne= Executors.newCachedThreadPool();
poolOne.submit(()->{});
Future<Long> submit=poolOne.submit(()->{
return 0L;
});
//大任务:固定数量线程
ExecutorService poolTwo=Executors.newFixedThreadPool(5);
poolTwo.submit(()->{});
Future<Long> submitTwo=poolTwo.submit(()->{
return 0L;
});
//单一任务:唯一任务
ExecutorService poolSingle=Executors.newSingleThreadExecutor();
poolSingle.submit(()->{});
Future<Long> submitSingle=poolSingle.submit(()->{
return 0L;
});
//调度任务:定期执行
ScheduledExecutorService scheduledPool=Executors.newScheduledThreadPool(5);
//每两次任务开始之间间隔固定,适用于每两次任务之间无依赖关系
scheduledPool.scheduleAtFixedRate(()->{},5,10, TimeUnit.SECONDS);
//每两次任务(从上一次任务结束至下一次任务开始之间固定间隔):适用于任何两次任务有依赖关系
scheduledPool.scheduleWithFixedDelay(()->{},5,10,TimeUnit.SECONDS);
//关闭线程池
pool.shutdown();