java基础——线程的常用方法和线程生命周期

线程的常用方法

package thread;
/*
测试Thread类中的常用方法:
1.start()
2.run():重写Thread方法,将线程要执行的操作声明在方法中
3.Thread.currentThread():静态方法,返回执行当前代码的线程
4.getName():获取当前线程的名字
5.setName():设置当前线程的名字
6.yield():当前线程交出cpu执行权
7.join():在线程a中调用线程b的join方法,此时线程a进入阻塞态,直到线程b完全执行完后,a才结束阻塞状态
8.stop():强制结束当期线程生命期,不推荐使用
9.Thread.sleep(long millitime):静态方法让当前线程睡眠指定毫秒数
10.isAlive():

线程的优先级
1.
    MAX_PRIORITY = 10
    NORM_PRIORITY = 5 默认优先级
    Min_PRIORITY = 1
2.设置当前线程的优先级
    getPriority():获取当前线程优先级
    setPriority(int p):设置~

    说明:高优先级的线程要抢占低优先级现场的cpu执行权,但只是从概率上讲,并不意味着
         只有当高优先级线程执行完以后,低优先级线程才执行

@author zsben
@create 2020-01-03 10:35
*/

class HelloThread extends  Thread{
    @Override
    public void run() {
        for(int i=0;i<100;i++) {
            if (i % 2 == 0) {
                try {
                    sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + ": " + i + ", "+this.getPriority());
            }
            if(i%20==0)
                this.yield();//当前执行的线程交出执行权
        }
    }

    public HelloThread(String name){
        super(name);
    }
    public HelloThread(){
        super();
    }
}

public class ThreadMethodTest {
    public static void main(String[] args) {
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

        HelloThread helloThread = new HelloThread();
        //HelloThread helloThread1 = new HelloThread("thread2");

        helloThread.setName("thread1");

        helloThread.setPriority(Thread.MAX_PRIORITY);//设置优先级
        helloThread.start();
        //helloThread1.start();

        //给主线程命名
        Thread.currentThread().setName("main");
        for(int i=0;i<100;i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
            if(i==20) {
                try {
                    helloThread.join();//让helloThread线程先执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println(helloThread.isAlive());
    }
}

线程的生命周期

/*

线程生命周期: sleep(time),join()
sleep()时间到,join()结束 |--->--------阻塞------<---| 等待同步锁,wait()
获得同步锁,notify() | | suspend()已被废弃
resume()已被废弃 | 获取cpu执行权 |
新建----------------->就绪<---------------------->运行------------------->死亡
start() 失去cpu执行权或yield() run()执行完,stop(),
出现Error或异常且没处理

*/

猜你喜欢

转载自www.cnblogs.com/zsben991126/p/12148255.html