Thread类详解:
JAVA中多线程的核心是Thread,Thread翻译为线程,线程有以下几种状态,接下来我会按照Thread类中的方法来逐一讲解。
复制代码
1.Thread t = new Thread()仅仅只是创建了线程,并没有为线程分配任何资源
2.start()方法用来启动线程,为相应地线程分配资源,分配到资源才能参与到竞争CPU的过程中 run():当start()启动一个线程后,线程一直等待直到获得了CPU执行时间,就进入run方法体
3.sleep()让线程休眠,主动让出CPU,但是不会释放锁,休眠时间满后,不一定立即得到执行,还需要重新参与竞争排队
public class ThreadSleep {
private int i = 0;
public Object lock = new Object();
public static void main(String[] args) {
ThreadSleep mh = new ThreadSleep();
ThreadTest tt = mh.new ThreadTest();
ThreadTest tt2 = mh.new ThreadTest();
tt.start();
tt2.start();
}
class ThreadTest extends Thread {
@Override
public void run() {
//使用的锁为Object lock = new Object(); 而不是方法所在的类的内置monitor
synchronized (lock) {
i++;
System.out.println("i:" + i);
try {
System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠开始");
long startTime = System.currentTimeMillis();
Thread.currentThread().sleep(1000);
long endTime = System.currentTimeMillis();
System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠时间:" + (endTime - startTime));
} catch (Exception e) {
} finally {
System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠结束");
}
i++;
System.out.println("i:" + i);
}
}
}
}
复制代码
输出:
i:1
线程i:9睡眠开始
线程i:9睡眠时间:1005
线程i:9睡眠结束
i:2
i:3
线程i:10睡眠开始
线程i:10睡眠时间:1004
线程i:10睡眠结束
i:4
复制代码 |