对线程的认识(一)

线程

CPU-进程-线程之间的关系
我们知道进程是CPU的最小计算单元
线程是CPU的最小执行单元
在这个过程中,线程的执行权,可以理解为CPU将信息流的阀门为谁开启。
线程就是计算机中带标记的信息流的路径,当CPU将阀门向谁打开时,谁就输送带标记的信息流。
线程的目的也是进行信息流的输送。提高信息流的输送效率。
线程的实质—让代码可以不按顺序执行—需要CPU计算的过程中可以单独执行不同的代码—线程即对需要执行的代码进行标记。线程有自己的编号,不同的编号有不同的作用。

单线程

单线程 代码的执行顺序不变 多线程 代码的执行顺序取决于执行CPU的线程是哪个。

多线程

同一个进程中开启了多条执行的路径即线程,线程之间相互不影响,且同时执行。即多段代码同时执行。
将内存开辟为不同的区域,按区域的执行,代码在不同的内存区域中。
标记线程执行的进度,和线程的编号。

多线程的优点

1.提高程序的效率
(1)同时并行(2)实现异步发送数据(3)后端耗时的代码可以采用异步实现
2.后端使用多线程的背景
HTTP默认情况下使用同步的形式,整个过程都是基于响应,如果服务器没有及时响应给客户,就会造成客户端一直等待,用户体验不好。
3.每个线程之间互不影响。

多线程CPU切换过程—CPU与核

对于如果使用单核CPU服务器的时候,开启多线程的情况下,并不是真正意义上的多线程,因为单核CPU服务器同一个时刻只能执行一个线程,单核CPU的服务器的执行真正意义上是并发的执行,即不同线程的快速切换。
对于多核CPU的服务器在开启多线程的时候,有多少个核就能够执行多少个线程,实现并行的执行线程的任务。

多线程是越多越好吗

CPU的切换会影响服务器的性能。
如果项目小可以采用多线程实现异步,如果项目大建议通过mq实现异步。
如果是一个高并发项目建议采用MQ替代多进程。

多线程的创建方式

1.继承Thread 重写run方法
2实现Runnable 接口 参数回调 装饰者设计模式
3.带返回结果的线程 Callable---Futuretask 底层开启一个线程 但执行顺序还是单线程的
4.线程池---四种实现方式
5.Spring异步直接使用	@Async注解 通过代理模式创建。
public class ThreadPool {
 public static void main(String[] args) {
  {
   ExecutorService exe = Executors.newCachedThreadPool();//多线程的创建方法
   System.out.println( Thread.currentThread().getName());
   exe.execute(()->System.out.println(Thread.currentThread().getName()));
  }
 }
}

用户线程和守护线程

用户线程不会在主线程停止后停止。   t1.setDaemon(false);
守护线程会在主线程停止后停止。 t1.setDaemon(true);

如何优雅的停止一个线程

public class EndThread extends Thread{
  static boolean flag = true;
 public void run() {
  while(flag) {
 //线程的内容
  }
 }
 public static void main(String[] args) {
  EndThread endThread = new EndThread();
  endThread.start();
  flag=false;
 }
}

wait和sleep的区别

wait------
sleep----
都是可以让当前线程阻塞。wait可以释放锁,
为什么wait可以放在object类中
	因为synchronizd可以使用任意对象为锁。

join方法

哪个线程调用该方法 哪个线程阻塞
	调用join方法时 主线程会进入线程池进行休眠 其他的线程依旧在执行。也就是使用该方法的线程会优先执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值