• 目录

与线程有关的方法

阅读量: 122 编辑

与线程有关的方法

一、与线程有关的方法

- 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 结束了");
            }
        }
    }
}

  • 目录