多线程创建和生命周期

Java 提供了三种创建线程的方法:

  • 通过实现 Runnable 接口;
  • 通过继承 Thread 类本身;
  • 通过 Callable 和 Future 创建线程(使用 FutureTask 类来包装 Callable 对象),和Runnable 比多了返回功能,包括结果和异常。

三种总结:

  • 1、线程实现Runnable或实现Callable接口,还可以继承其他类。

    2、实现接口方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。

    3、继承Thread类的线程类不能再继承其他父类(Java单继承决定)

  • 一般采用接口创建线程。

一个线程的生命周期的状态:新建,可执行,执行中,阻塞(包括等待阻塞,同步阻塞和其他阻塞,如调用sleep() 或 join()),终止。

常见线程监控器:jvisualvm,jstack,jmc。其中jmc功能较多。

并发三原则:原子性,可见性,有序性。指令重排不会影响单个线程的执行,但是会影响到线程并发执行的正确性。

volatile:保证了可见性和有序性。当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。操作是原子的才能保证是原子性。

CPU缓存一致性协议MESI,相当于乐观锁的version。嗅探机制做到观察模式,CPU乱序执行。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值