目录
并发和并行
并发:同一时间段发生
并行:同时发生
进程与线程
进程
进入到内存中的程序叫做进程
线程
程序运行时,会开启一条应用程序到CPU的执行路径,CPU通过这个路径执行进程,这个路径就叫做线程
多线程的好处:效率高、多个线程之间互不影响
线程调度的方式
分时调度
所有线程轮流使用CPU的使用权,平均分配每一个线程占用CPU的时间
抢占式调度
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java中使用抢占式调度
线程礼让
礼让线程,即让当前正在执行的线程暂停,但不阻塞,并将线程从运行状态转为就绪状态。此时cpu重新执行调度,由于调度是随机的,因此礼让不一定成功
Thread.yield
Join线程强制
Join相当于VIP,咱们普通人都得排队办理业务,VIP来了之后,立马切换到为VIP服务,其他线程阻塞,必须等待VIP的事情办完,才能继续。
thread.join();
设置线程优先级
你可以在线程启动之前设置线程的优先级,设置了线程优先级后,优先级高的线程只是被调度的机会比其他的更大而已,并不一定总是最先被CPU调用。
线程优先级用数字表示范围是1~10
- main主线程默认优先级是5
- 可以通过getPriority()获取优先级
- 也可以通过setPriority(int)设置优先级
守护线程daemon
线程分为用户线程和守护线程
- 虚拟机必须确保用户线程执行完毕
- 虚拟机不用等待守护线程执行完毕
默认情况下我们自己搞的线程包括main线程都是用户线程
守护线程我们常常看不见,它用于后台记录操作日志、监考内存、垃圾回收(gc)
我们可以手动把用户线程设置为守护线程
Thread thread = new Thread(god);
thread.setDaemon(true); //true代表守护,默认是false代表用户