Java-多线程

多线程

使用多线程可以提高cpu的利用率,可以让程序充分利用cpu资源,解决高并发带来的负载均衡问题。

优点:

  • cpu资源得到合理的利用
  • 代码更加简洁
  • 让程序运行的更有效率,响应更快

缺点:

  • 需要更多的内存空间
  • 并行访问可能影响数据的准确性
  • 数据被多线程共享,可能出现死锁的情况

进程
讲到线程肯定要提到进程,那什么是进程?
简单的来说进程就是计算机正在运行的一个应用程序。线程是进程的基本单位,程序执行的最小单位,为独立完成程序中的某个功能而存在,一个进程是由一个或多个线程组成。

进程和线程的区别
进程:运行时拥有独立内存,每个进程互不干扰。
线程:共享内存,运行必须依赖进程,不能独立执行,而且还有执行的入口和出口。

线程的使用

  • 继承Thread类
  • 创建自定义类并继承Thread
  • 重写Thread的run方法
  • 实现Runnable接口
  • 创建自定义类并实现Runnable接口
  • 实现run方法

线程的5种状态

  1. 创建状态
  2. 就绪状态
  3. 运行状态
  4. 阻塞状态
  5. 终止状态

线程调度

线程休眠
线程暂停执行,让程序进入阻塞状态,cpu资源分给其他线程。
sleep()

线程合并
让某一个线程合并到当前线程,交替执行变成顺序执行,调用join方法来实现。

线程礼让
在某个时间点暂停争夺cpu资源,进入阻塞状态,但这只是一时的,时间点过后会重新加入争夺cpu资源,调用yield方法来实现。

线程中断
线程因为某个原因中断,不再加入争夺cpu资源的行列;

  1. 手动暂停 public boolean isInterrupt()
  2. 执行完毕后自动停止 public void stop()
  3. 执行过程中出现错误 public void interrupt()

线程同步
synchronized方法
通过jvm实现
java对象的内置锁,内置锁会保护被synchronized关键字修饰的方法。
线程安全的单例模式
一个类只能有一个实例对象,由多个线程来共享该实例对象的资源。

死锁
死锁是一种错误,在实际开发中应当避免

重入锁
是synchronized的升级版,通过jdk实现。

特点

  • 可以给同一个资源添加多把锁,完事后需要手动解锁
  • 可中断,在线程等待获取锁的过程中可以主动终止,通过lockInterruptibly()来实现。
  • 具备限时性的特点,可以判断某个线程在一定时间内是否可以获取锁,通过调用tryLock(long timeout<时间数值>,TimeUint unit<时间单位>),返回值是boolean:true表示某段时间可以获取锁,false则反之。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值