美文网首页
带你搞懂Java多线程(二)

带你搞懂Java多线程(二)

作者: 爺珍爱那颗心 | 来源:发表于2020-01-02 20:14 被阅读0次

带你搞懂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()真正和线程挂钩,表示真正启动了一个线程。

其他方法

相关文章

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • 带你搞懂Java多线程(三)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二) 什么是线程间的共享 Java支持多个线程同时访问一个对象...

  • 带你搞懂Java多线程(二)

    带你搞懂Java多线程(一) Java里的线程 Java里的程序天生就是多线程的 启动线程的方式 ①扩展Threa...

  • 带你搞懂Java多线程(一)

    什么是多线程 多线程也叫并发编程,那么在写多线程之前,我们先来了解一下并发编程的基础概念。①CPU核心数和线程数的...

  • 线程、多线程和线程池,看完这些你就能全部搞懂了

    摘要:一文带你搞懂线程、多线程和线程池。 本文分享自华为云社区《一文搞懂线程与线程池[https://bbs.hu...

  • 带你搞懂Java反射

    什么是反射 在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应方法。 反射的缺点 因为反...

  • 带你搞懂Java线程池

    什么是线程池 把线程进行池化,调用的时候直接去池里面去取,而不是每次去重新创建,不用的时候放回线程池,而不是直接销...

  • 带你搞懂Java泛型

    什么是泛型 参数化的类型:将需要传入的属性,进行参数化,实际调用时才指定传入的数据类型。 为什么要用泛型 同样的一...

网友评论

      本文标题:带你搞懂Java多线程(二)

      本文链接:https://www.haomeiwen.com/subject/grrgoctx.html