多线程
一、程序-进程-线程
1、程序
计算机指令的集合,以文件形式存储在磁盘上,即指一段静态的代码,静态对象。
2、进程
是一个程序在其自身的地址空间的一次执行活动,是系统进行资源分配、调度和独立运行的基本单位。(它使用系统资源)
3、线程
进程可进一步细分为线程,是一个程序内部的一条执行路径。是操作系统能过运算调度的最小单位。
举个例子:
工厂—>程序 、、 产品—>进程 、、 工人—>线程
二、进程与线程的
一个程序至少有一个进程,一个进程至少有一个线程。
1、什么是多进程、多线程?
多进程就是允许多个任务同时进行。
多线程是允许多个程序分成不同的部分运行。
(提供协调机制:防止进程之间和线程之间发生冲突;允许程序之间和线程之间共享资源)
三、并发和并行
并发:一个处理器同时处理多个任务(一个人同时吃三个馒头)。
并行:多个处理器同时处理多个不同的任务(三个人同时吃三个馒头)。
进程的创建和启动
Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。
Thread类的特性
➢每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。
➢通过该Thread对象的start()方法来调用这个线程。
Thread类
构造方法
➢Thread():创建新的Thread对象
➢Thread(String threadname):创建线程并指定线程实例名➢Thread(Runnabletarget):指定创建线程的目标对象,它实现了Runnable接口中的run方法
➢Thread(Runnable target, String name):创建新的Thread对象
创建线程的两种方式
一、继承Thread类
- 定义子类继承Thread类。
- 子类中重写Thread类中的run方法。
- 创建Thread子类对象,即创建了线程对象。
- 调用线程对象start方法:启动线程,调用run方法。
有关方法
void start(): 启动线程,并执行对象的run()方法
run(): 线程在被调度时执行的操作
String getName(): 返回线程的名称
void setName(String name):设置该线程名称
static currentThread(): 返回当前线程
static void yield():线程让步,暂停当前进程,执行机会让给优先级相同或者更高的进程
join():加入另一个线程,原先的调用线程将被阻塞,直到join() 方法加入的join 线程执行完为止
static void sleep(long millis):(指定时间:毫秒) :在指定时间内放弃cpu的控制,让其他线程有机会被执行,时间到后重新排队
二、实现Runnable接口
1)定义子类,实现Runnable接口。
2)子类中重写Runnable接口中的run方法。
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。
线程的生命周期
Synchronized方法
Java对于多线程的安全问题提供了专业的解决方式:同步机制
1.synchronized (对象){
// 需要被同步的代码;
}
2、synchronized还可以放在方法声明中,表示整个方法为同步方法。
public synchronized void show (String name){ …}