多线程

1.线程与进程是什么?
进程:正在运行的程序。
线程:运行程序需要执行的任务。
多线程:在一个应用程序(进程)中有多个任务同时执行
多进程:在操作系统中有多个应用程序同时执行。

2.使用多线程可能会遇到的问题?
安全性问题
Public int decrement(){
// count 初始化为10.
Return --count;
}
–count看上去是一步操作,其实包含三步操作;
1.读取count的值
2.将值-1
3.把计算结果赋值给count.

产生原因:
如图展示的是错误的执行顺序导致的线程问题。两个线程同时执行该方法时,他们读取到的count值都为10,最后返回的结果都为9:意味着两个人买了东西,但是库存才减少了1,这显然是不符合业务逻辑的。
为避免这种问题,需要保证调用 decrement()方法的线程操作的原子性,即当前线程调用该方法时,其他线程不可调用。
Sychronize内置锁或者ReentrantLock显示锁的加锁机制、使用线程安全的原子类、采用CAS的方式。·
活跃性问题
某个操作因为阻塞或者循环,无法继续执行下去。典型的活跃性问题
死锁:多个线程之间互相 持有对方需要的锁资源,因为无法获取所以无法释放导致阻塞,这就是死锁。

产生原因:不正确的加锁机制以及线程之间执行顺序的不可预料性。
如何预防死锁
1.保证加锁顺序是一致的。
2.超时放弃机制.trylock(long time,TimeUnit unit)方法,可以使当前线程按照固定时间来等待锁,一旦获取锁超时,自动释放之前已经获取过的所有锁·
性能问题
线程本身的创建、线程之间的切换都要消耗资源,如果频繁地创建线程或者cpu在线程调度花费的时间远大于线程运行的时间,使用线程反而得不偿失。
1.使用线程安全的并发集合。copyOnWriteArrayList、ConcurrentHashMap、Collections.synchronizedList()方法来获取线程的集合。
2.不要使用 SimpleDateFormat作为全局变量使用,因为其不是一个线程安全的类,内部实现中对一些共享变量的操作没有进行同步。
推荐使用 java8 的 LocalDateTime 或者 DateTimeformatter,都是线程安全的,可用来代替SimpleDateFormat。
3.正确使用线程池,尽量作为全局变量来使用。
不要将线程池作为局部变量来使用,如果一个方法被频繁调用,那么这个线程池就会被频繁创建,耗费资源。
Executors.NewFixedThreadPool(int);
创建一个固定容量大小的线程池,corePoolSize和maximumPoolSize核心线程数和最大线程数是一样的,阻塞队列默认为 LinkedBlockingQueue.

Executors.NewSingleThreadExecutor();
创建容量为1的单例线程池,核心线程数与最大线程数都是1,阻塞队列同上。
Executors.newCachedThreadPool();
创建一个可缓存的线程池,容量大小为Integer.Max Value.

线程数建议
CPU密集型应用。
Cpu密集的意思是任务需要进行大量复杂的运算,几乎没有阻塞,需要CPU长时间高速运行。
CorePoolSize=cpu核数+1个线程。。
Cpu核数=Runtime.getRuntime().availableProcessors()
IO密集型应用。

IO 密集型任务会涉及到很多的磁盘读写或者网络传输,线程花费更多的时间在 IO阻塞上,而不是cpu运算,一般的业务应用都属于IO密集型。
corePoolSize=cpu数/(1-阻塞系数);
阻塞系数=线程等待时间/(线程等待时间+cpu处理时间)
IO密集型任务的cpu处理时间要往往小于线程等待时间,所以阻塞系数一般是0.8-0.9之间
以8核单槽CPU为例
corePoolSize=8/(1-0.9)=80

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值