java多线程汇总_并发编程—Java多线程总结

先了解几个概念多线程:进程和线程是一对多的关系,一个进程(一个程序),由不同的线程来运行。有共享的空间也有独立的空间。

并行: 同时进行,拿两个cpu来跑同样的程序同样的代码片段,那就并行了。

并发:不同时进行,只有一个cpu,而多个线程都在争取这个cpu资源。便是并发。用TPS和QPS去衡量并发程度。

TPS:Transactions Per Second(每秒传输的事物处理个数),简单说就是服务器每秒处理事务的个数。

完整的包括: 请求+数据库访问+响应

QPS:Queries Per Second(每秒查询率),简单说就是服务器每秒处理完请求的个数。

1、线程的生命周期

先了解线程的生命周期,上图。线程的生命周期从一个新的线程产生到结束中间会经历非常多的情况,大体上如下图,多线程环境下我们主要是再running的时候采取线程的保护措施,从而使多线程环境下,让线程进入阻塞的状态。这种保护思想其实就是排他了,到最后都得一个个来,无论式任务还是内存互不干扰,便达到线程安全了。c7ea6605c8832455e26c805a3bd71046.png

线程的生命周期

2、jvm内存模型

到了jdk8,内存模型已经有了相当的改变了,下图是小编学习了几篇优秀的博文学习,根据自己的理解绘制出来的,请多指教。18a812f514096e8f432dbf49b1ca69df.png

jdk8内存模型

独立内存空间

从图中可以看出线程安全的区域是在栈空间,每个线程会有独立的栈空间,从而也解释了为什么方法内是线程安全的,而全局变量这些是线程不安全的,因为这些都在堆区。

共享内存空间

堆空间,和MateSpace是被所有线程共享的,因此在处理多线程问题的时候,其实主要是处理这两个空间的内容。共享区域在不加任何保护的情况下对其操作,会有异常结果。

怎么做到线程安全?只使用线程安全的内存空间,不使用共享的空间

对共享的内存空间采取保护措施,比如:加Lock,volatile修饰等

3、线程的实现方式继承Thread0e3c5179c3e33157425f00bb875ed57a.png实现Runnable接口ce25ebfcc061e8e7eaca67129b1bc03c.pngCallable和Futuree32539f3390ea6a7c634ecc20b2bb3fa.png

补充:Fulture和Callable(Future模式)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值