线程的常用方法

开发中用到的线程方法也是很常见的,其方法的区别理解清楚了,操作也就顺手了。线程中的常用的方法有如下几个,分别是sleep(),wait()和notify()和notifyAll()、suspend()和resume()、yield()、join()、interrupt()。下面我就以上方法做一个简单的介绍。首先是join()方法,该方法里面的参数是一个毫秒值,表示等待几秒执行该操作。它的主要作用就是同步,由线程的并行转换为串行。通俗的说就是停止当前的线程,让使用join的线程先执行完毕,再执行其它线程。代码如下:

线程任务类:

package cn.test;

public class TaskMy implements Runnable{

    @Override
    public void run() {
        for(int i=0;i<20;i++) {
            System.out.println(Thread.currentThread().getName()+"====="+i);
        }
    }
}

创建线程并执行线程:

package cn.test;

public class DemoMain {
    public static void main(String[] args) throws InterruptedException {

//        创建对象
        TaskMy task = new TaskMy();
        TaskMy task2 = new TaskMy();
        
//        创建线程对象
        Thread t1 = new Thread(task, "线程1");
        Thread t2 = new Thread(task2, "线程2");
        
//        启动线程
        t1.start();
        
//        暂停其它线程,让t1执行完再执行其它线程
        t1.join();
        
        t2.start();
            
    }
}

这串代码的作用是先执行t1线程,再执行t2线程。对于这样,如果改变join和start方法的顺序,结果是不一样,失去了同步的作用。join的原理说的简单点就是,调用其它线程的wait方法,执行完毕后再执行notifyAll方法。

Sleep和wait方法之间有什么区别,这个也是必须要掌握的。首先sleep是线程的方法,而wait是Object方法。sleep它是让出CPU资源,暂停设置的时间,时间一到,恢复运行状态,最主要的是它不会释放对象锁。而调用wait方法,释放对象锁,处于挂起状态,只有调用notifyAll才可以进入对象锁定池。下面是代码案例:

package cn.test;

public class TaskMy implements Runnable{

    @Override
    public void run() {
        System.out.println("线程1执行");
        for(int i=0;i<100;i++) {
            try {
//                线程睡眠
                Thread.sleep(100);
                System.out.println(Thread.currentThread().getName()+"====="+i);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("线程1结束");
    }
}
原文地址:https://www.cnblogs.com/lichangyun/p/10213866.html