多线程1.0

关于多线程的学习1.0(狂神说)

对于程序、进程、线程的认识

创建线程的三种方式:

创建方式一:继承Thread类,重写run()方法,调用start()开启线程

  • 实现代码

    • 总结:注意,线程开启不一定立即执行,由CPU调度执行。
  • 为什么我们调⽤ start() ⽅法时会执⾏ run() ⽅法,为什么我们不能直接调⽤ run() ⽅法?

    • new ⼀个 Thread,线程进⼊了新建状态。调⽤ start()⽅法,会启动⼀个线程并使线程进⼊了就绪状态,当分配到时间⽚后就可以开始运⾏了。start() 会执⾏线程的相应准备⼯作,然后⾃动执⾏ run() ⽅法的内容,这是真正的多线程⼯作。 但是,直接执⾏ run() ⽅法,会把 run() ⽅法当成⼀个 main 线程下的普通⽅法去执⾏,并不会在某个线程中执⾏它,所以这并不是多线程⼯作。

总结: 调⽤ start() ⽅法⽅可启动线程并使线程进⼊就绪状态,直接执⾏ run() ⽅法的话不会以多线程的⽅式执⾏。

创建方式二:实现Runnable接口,重写run()方法,执行线程需要丢入runnable接口实现类,调用start()开启线程

  • 代码实现:

对于继承Thread类和实现Runnable接口的小结:

  • ==这两种本质上都是通过Thread类调用start()方法,来实现线程开启run()方法。

创建方式三:实现Callable接口(了解)

实现静态代理对比Thread:

Lamda表达式:


线程五大状态:


线程状态观测:

Thread.State state = thread.getState();

  • 死亡之后的线程就不能再启动了

线程有关的一些方法:

线程休眠——sleep()方法
  • 模拟网络延时:放大问题的发生性
  • 模拟倒计时:
  • 每个对象都有一把锁,sleep不会释放锁
线程礼让——yiled()方法不一定礼让成功

线程强制执行——join()方法
  • 插队的线程会强制执行

线程优先级

守护线程

posted @ 2021-06-24 00:16  BigMonster85  阅读(44)  评论(0)    收藏  举报