1️⃣类定义
public class Thread implements Runnable
实现了Runnable接口:Runnable接口中只有一个run()方法,它非Thread类子类的类提供的一种激活方式。一个类实现Runnable接口后,并不代表该类是一个“线程”类,不能直接运行,必须通过Thread实例才能创建并运行线程。
2️⃣属性
/**
* 线程名称的字节数组
*/
private volatile char name[];
/**
* 线程优先级
*/
private int priority;
/**
* 线程是否单步
*/
private boolean single_step;
/**
* 是否是守护线程
*/
private boolean daemon = false;
/**
* JVM状态
*/
private boolean stillborn = false;
/**
* 从构造方法传过来的Runnable
*/
private Runnable target;
/**
* 线程组
*/
private ThreadGroup group;
/**
* 类加载器
*/
private ClassLoader contextClassLoader;
/**
* 线程编号
*/
private static int threadInitNumber;
/**
* 初始状态
*/
private volatile int threadStatus = 0;
/**
* 最低优先级
*/
public final static int MIN_PRIORITY = 1;
/**
* 默认优先级
*/
public final static int NORM_PRIORITY = 5;
/**
* 最高优先级
*/
public final static int MAX_PRIORITY = 10;
/**
* 线程状态
*/
public enum State {
/**
* 新创建了一个线程对象,但还没有调用start()方法
*/
NEW,
/**
* Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
* 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该
* 状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此
* 时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)
*/
RUNNABLE,
/**
* 表示线程阻塞于锁.
*/
BLOCKED,
/**
* 进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
*/
WAITING,
/**
* 该状态不同于WAITING,它可以在指定的时间后自行返回
*/
TIMED_WAITING,
/**
* 表示该线程已经执行完毕
*/
TERMINATED;
}
3️⃣构造器
Thread的构造器都是调用本类私有的init()方法来初始化线程的,init()方法是一个重载这个方法我们会在讲解方法时详细讲解;
public Thread() {
init(null, null, "Thread-" + nextThreadNum(), 0);
}
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
Thread(Runnable target, AccessControlContext acc) {
init(null, target, "Thread-" + nextThreadNum(), 0, acc, false);
}
public Thread(ThreadGroup group, Runnable target) {
init(group, target, "Thread-" + nextThreadNum(), 0);
}
public Thread(String name) {
init(null, null, name, 0);
}
public Thread(ThreadGroup group, String name) {
init(group, null, name, 0);
}
public Thread(Runnable target, String name) {
init(null, target, name, 0);
}
public Thread(ThreadGroup group, Runnable target, String name) {
init(group, target, name, 0);
}
public Thread(ThreadGroup group, Runnable target, String name,
long stackSize) {
init(group, target, name, stackSize);
}
-----------------> 未完待续!!!
网友评论