首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你搞懂Java多线程(二)

Java里的线程

  • Java里的程序天生就是多线程的

启动线程的方式

  • ①扩展Thread类覆盖run方法并用扩展类执行run方法
  • ②把实现Runnable接口的类的实例实例交给线程执行
  • ③把实现Callable接口的类的实例交给线程执行

注意:1和2中的run方法是没有返回值的,如果需要返回值则使用3,但3不能直接放到Thread的构造中,需要用FutureTask包装后才可放入,拿到返回值需使用FutureTask的get方法。

Runnable和Callable是对任务的抽象,只有Thread是对线程的抽象。

安全中断线程的方式

  • interrupt:用来中断线程。
  • interrupted:静态方法返回Boolean值,用来判断线程是否被终断了,且可将标志位由true改变为false
  • isInterrupted:是否被中断了。
  • 为什么推荐用interrupt去中断线程
    • interrupt是协作式的不是抢占式的,线程的使用者回去判断是否中断,而不是立即中断。

不要用stop、suspend(挂起)和resume

  • 好了有人可能会问为什么不要用,原因如下:
    • stop方法会立即杀死线程,不管线程所调用的资源是否释放。
    • suspend方法将线程挂起的时候也不会释放资源,如果被挂起前这个线程拿到了锁,那么这个线程将带着锁被挂起,容易造成死锁。

深入理解start()和run()

  • run()是普通的成员方法,是业务逻辑实现的地方。
  • start()真正和线程挂钩,表示真正启动了一个线程。

其他方法

  • join()把指定的线程加入当前线程内。 *yield()当前线程让出CPU的执行权。

线程的一生

下一篇
举报
领券