与线程有关的方法
一、与线程有关的方法
- start() //新建的线程进入Runnable状态
- run() //线程进入Running 状态
- wait() //线程进入等待状态,等待被notify,这是一个对象(Object)方法,而不是线程方法
- notify()/notifyAll() //唤醒其他的线程,这是一个对象方法,而不是线程方法
- sleep() //线程睡眠指定的一段时间
- join() //调用这个方法的主线程,等待加入的子线程完成,它可以使得线程之间的并行执行变为串行执行
- yield() //线程放弃执行,使其他优先级不低于此线程的线程有机会运行,它是一个静态方法
二、代码实战
代码的详细解读,可以参考视频教程
package com.qicong.gj.c31;
/**
* User: 祁大聪
*/
public class WaitThread {
public static void main(String[] args) {
WaitThread.ThreadOne one = new WaitThread().new ThreadOne();
WaitThread.ThreadTwo two = new WaitThread().new ThreadTwo();
one.start(); // start() 函数
// try {
// one.join(); //join() 函数
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
two.start();
}
static Object obj = new Object();
public class ThreadOne extends Thread{
@Override
public void run() {
synchronized (obj){
// Thread.yield();
System.out.println("ThreadOne 开始了");
for(int i = 0 ; i < 10; i++){
System.out.println("ThreadOne --- " + i);
try {
Thread.sleep(1000); // sleep() 函数
} catch (InterruptedException e) {
e.printStackTrace();
}
if(i == 5){
try {
System.out.println("开始等待");
obj.wait(); // wait()函数
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("ThreadOne 结束了");
}
}
}
public class ThreadTwo extends Thread{
@Override
public void run() {
synchronized (obj){
System.out.println("ThreadTwo 开始了");
for(int i = 0 ; i < 10; i++){
System.out.println("ThreadTwo --- " + i);
try {
Thread.sleep(1000); // sleep() 函数
} catch (InterruptedException e) {
e.printStackTrace();
}
}
obj.notify(); // notify() 函数
System.out.println("唤醒线程ThreadOne");
System.out.println("ThreadTwo 结束了");
}
}
}
}