多线程
-
程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。
-
进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期
- 进程作为资源分配的单位
-
线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开 销小
-
Thread类
-
构造器
- Thread():创建新的Thread对象
- Thread(String threadname):创建线程并指定线程实例名
- Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法
- Thread(Runnable target, String name):创建新的Thread对象
-
创建多线程
-
方式一:继承Thread类
1) 定义子类继承Thread类。
-
子类中重写Thread类中的run方法。
-
创建Thread子类对象,即创建了线程对象。
-
调用线程对象start方法:启动线程,调用run方法。
-
-
方式二:实现Runnable接口
1) 定义子类,实现Runnable接口。
-
子类中重写Runnable接口中的run方法。
-
通过Thread类含参构造器创建线程对象。
-
将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
-
调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。
-
-
-
多线程的方法
-
void start(): 启动线程,并执行对象的run()方法
-
run(): 线程在被调度时执行的操作
-
String getName(): 返回线程的名称
-
void setName(String name):设置该线程名称
-
static Thread currentThread(): 返回当前线程。在Thread子类中就 是this,通常用于主线程和Runnable实现类
-
static void yield():线程让步
-
暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
-
若队列中没有同优先级的线程,忽略此方法
-
-
join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将 被阻塞,直到 join() 方法加入的 join 线程执行完为止
-
static void sleep(long millis):(指定时间:毫秒)
-
stop(): 强制线程生命期结束,不推荐使用
-
boolean isAlive():返回boolean,判断线程是否还活着
-
-
-
线程的生命周期
-
线程的同步:Synchronized
-
Java对于多线程的安全问题提供了专业的解决方式:同步机制
-
同步代码块: synchronized (对象){ // 需要被同步的代码; }
-
synchronized还可以放在方法声明中,表示整个方法为同步方法。 例如: public synchronized void show (String name){ …. }
-
-
线程的通信
- wait() 与 notify() 和 notifyAll()
- wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,而当 前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有 权后才能继续执行。
- notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
- notifyAll ():唤醒正在排队等待资源的所有线程结束等待.
- wait() 与 notify() 和 notifyAll()
续执行。
- notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
- notifyAll ():唤醒正在排队等待资源的所有线程结束等待.