【JAVA】多线程基础

1.多线程基础⑴什么是多线程运行中的exe程序就是一个进程,进程中独立的子任务就是线程⑵线程和进程的区别进程是系统进行资源分配的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,一个进程可以包括多个线程⑶线程的五大状态新建 创建线程还没有start就绪 start但是还没有获取CPU时间片运行 正在执行阻塞 比如sleep等...
摘要由CSDN通过智能技术生成

1.多线程基础
⑴什么是多线程

运行中的exe程序就是一个进程,进程中独立的子任务就是线程

⑵线程和进程的区别

进程是系统进行资源分配的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,一个进程可以包括多个线程

⑶线程的五大状态
  • 新建 创建线程还没有start
  • 就绪 start但是还没有获取CPU时间片
  • 运行 正在执行
  • 阻塞 比如sleep等等状态
  • 死亡 正常退出或者让发生异常
2.线程的启动
⑴继承Thread类
⑵实现Runnable接口
⑶实现Callable接口
  • Callable规定的方法是call(),Runnable规定的方法是run()
  • Callable的任务执行后可返回值,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞。而Runnable的任务是不能获取返回值
  • call方法可以抛出异常,run方法不可以
3.停止线程

一般有三种方式可以停止线程:

  • ①使用stop方法强行终止线程(不推荐)
  • ②使用退出标志(推荐)
  • ③使用interrupt方法中断线程,但是记住一个很重要的点:interrupt()并不能真正的中断线程,需要配合其它方式
4.sleep
  • 必须捕获异常。
  • 线程睡眠到期自动苏醒,并返回到可运行状态,不是运行状态
  • sleep方法没有释放锁
5.wait/notify/notifyAll

三者都需要在同步方法或者同步代码块调用。否则抛java.lang.IllegalMonitorStateException运行异常

  • wait 进入wait()方法后,当前线程释放锁
  • notify 唤醒一个正在等待该对象的线程,然后竞争获取锁
  • notifyAll 唤醒所有正在等待该对象的线程,然后竞争获取锁
6.yeild

使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的。

7.join

Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。join里面可以传等待时间,0的话等待执行完毕。

8.线程优先级

优先级高的线程获得的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。

  • ①线程优先级用thread.setPriority(int a)( 1<=a<=10)方法来进行赋值
  • ②线程优先级有继承性,如果主线程启动threadA线程且threadA线程没有另外赋予优先级,则threadA线程优先级和main线程一样(即通过A线程启动线程B,线程B没有设置优先级则优先级同A一致)。线程默认优先级为5.
  • ③CPU尽量将执行资源让给线程优先级高的,即线程优先级高的总是会大部分先执行,但是不代表高优先级的线程全部都先执行完再执行低优先级的线程
  • ④在调用start方法前面设置
9.内存可见性
⑴ JMM

一个线程对共享变量值的修改能够及时被其它线程看到,我们把这个共享变量叫做可见的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值