[Java]Java线程的创建和线程的等待,唤醒机制


[Java]Java线程的创建和线程的等待,唤醒机制
文章图片
[Java]Java线程的创建和线程的等待,唤醒机制
文章图片
【[Java]Java线程的创建和线程的等待,唤醒机制】在Java中多线程是很重要的一个部分 , 线程是指进程中的一个执行流程 , 一个进程中可以运行多个线程 。 比如java.exe进程中可以运行很多线程 。 线程总是属于某个进程 , 进程中的多个线程共享进程的内存 。 而进程就是指一个内存中运行的应用程序 , 每个进程都有自己独立的一块内存空间 , 一个进程中可以启动多个线程 。 比如在Windows系统中 , 一个运行的exe就是一个进程 。

一、进程和线程的关系进程是一个应用程序 , 线程是进程中一个小的执行单元 , 一个进程中至少有一个线程 , 一个进程中有多个线程的时候 , 就称之为多线程程序 。 而main方法是一个主线程 ,
二、创建线程方式一:继承Thread类, 重写run方法 , 在这个run方法里面定义线程任务 , 创建线程对象 , 启动线程(start方法)方式二:实现Runnable接口 , 重写run方法 , 在这个run方法里面定义线程任务 , 创建线程对象 , 启动线程继承Thread类和实现Runnable接口的2种方式的特点:继承是单继承 , 接口可以多实现 , 一个类在继承一个父类同时 , 还可以实现接口 。 实现Runnable接口这种创建线程的方式解决了继承Thread类的单继承的局限性 , 实现接口方式更为常用匿名线程创建方式
三、线程池线程池 , 其实就是一个容纳多个线程的容器 , 其中的线程可以反复使用 , 省去了频繁创建线程对象的操作 , 无需反复创建线程而消耗过多资源 。
四、线程5大状态 , 1.新建状态 , 2.就绪状态 , 3.阻塞状 , 4.运行状态 , 5.死亡状态
五、线程安全如果有多个线程在同时运行 , 而这些线程可能会同时运行这段代码 。 程序每次运行结果和单线程运行的结果是一样的 , 而且其他的变量的值也和预期的是一样的 , 就是线程安全的 。 其实 , 线程安全问题都是由全局变量及静态变量引起的 。 若每个线程中对全局变量、静态变只有读操作 , 而无写操作 , 一般来说 , 这个全局变量是线程安全的;若有多个线程同时执行写操作 , 一般都需要考虑线程同步 , 否则的话就可能影响线程安全 。
六 线程同步(线程安全处理Synchronized) 同步方法 ,死锁 , 同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时 , 如果同步中嵌套了其他的同步 。 这时容易引发一种现象:程序出现无限等待 , 这种现象我们称为死锁 。 这种情况能避免掉 。Lock锁 , Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作 。 主要方法 lock()和 unlock()同步代码块: 在代码块声明上 加上synchronized 。
七、线程等待唤醒机制在了解线程的等待唤醒机制之前 , 有必要搞清一个概念——线程之间的通信:多个线程在处理同一个资源 , 但是处理的动作(线程的任务)却不相同 。 通过一定的手段使各个线程能有效的利用资源 。 而这种手段即—— 等待唤醒机制 。 等待唤醒机制所涉及到的方法:wait() :等待 , 将正在执行的线程释放其执行资格 和 执行权 , 并存储到线程池中 。 notify():唤醒 , 唤醒线程池中被wait()的线程 , 一次唤醒一个 , 而且是任意的 。 notifyAll(): 唤醒全部:可以将线程池中的所有wait() 线程都唤醒 。 其实 , 所谓唤醒的意思就是让 线程池中的线程具备执行资格 。 必须注意的是 , 这些方法都是在同步中才有效 。 同时这些方法在使用时必须标明所属锁 , 这样才可以明确出这些方法操作的到 , 底是哪个锁上的线程 。