Java中线程的概念

目录

并发和并行

进程与线程

线程调度的方式

线程礼让 

Join线程强制

设置线程优先级

守护线程daemon


 

并发和并行

 

并发:同一时间段发生

并行:同时发生 

Java中线程的概念_第1张图片

 

 

进程与线程

 

进程

进入到内存中的程序叫做进程

Java中线程的概念_第2张图片

 

线程

程序运行时,会开启一条应用程序到CPU的执行路径,CPU通过这个路径执行进程,这个路径就叫做线程

多线程的好处:效率高、多个线程之间互不影响

Java中线程的概念_第3张图片

 

 

线程调度的方式

 

分时调度

所有线程轮流使用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代表用户

 

你可能感兴趣的:([线程与并发])