java 线程等待 唤醒_Java线程的创建和线程的等待,唤醒机制

在Java中多线程是很重要的一个部分,线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。而进程就是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。

3fbaf1dc42ee3b5683a021f6fb46a265.png

一、进程和线程的关系进程是一个应用程序,线程是进程中一个小的执行单元,一个进程中至少有一个线程,一个进程中有多个线程的时候,就称之为多线程程序。而main方法是一个主线程,

二、创建线程方式一:继承Thread类 ,重写run方法,在这个run方法里面定义线程任务,创建线程对象,启动线程(start方法)方式二:实现Runnable接口,重写run方法,在这个run方法里面定义线程任务,创建线程对象,启动线程继承Thread类和实现Runnable接口的2种方式的特点:继承是单继承,接口可以多实现,一个类在继承一个父类同时,还可以实现接口。实现Runnable接口这种创建线程的方式解决了继承Thread类的单继承的局限性,实现接口方式更为常用匿名线程创建方式

b02f0662e516473ebfe40991ecc1fa9c.png

三、线程池线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。

d7ba492b418a1260eebc4503177a090b.png

四、线程5大状态,1.新建状态,2.就绪状态,3.阻塞状,4.运行状态,5.死亡状态

五、线程安全如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。其实,线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

六 线程同步(线程安全处理Synchronized) 同步方法, 死锁,同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免掉。 Lock锁,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作。主要方法 lock()和 unlock()同步代码块: 在代码块声明上 加上synchronized。

28dc091866dc9b0a467fee5f32d5b636.png

七、线程等待唤醒机制在了解线程的等待唤醒机制之前,有必要搞清一个概念——线程之间的通信:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。通过一定的手段使各个线程能有效的利用资源。而这种手段即—— 等待唤醒机制。等待唤醒机制所涉及到的方法:wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中。notify():唤醒,唤醒线程池中被wait()的线程,一次唤醒一个,而且是任意的。notifyAll(): 唤醒全部:可以将线程池中的所有wait() 线程都唤醒。其实,所谓唤醒的意思就是让 线程池中的线程具备执行资格。必须注意的是,这些方法都是在同步中才有效。同时这些方法在使用时必须标明所属锁,这样才可以明确出这些方法操作的到,底是哪个锁上的线程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值