对于多线程的理解
由于工作原因,一直没有时间将知识体系系统的总结下,现在人民银行也逐渐闲了下来。闲了几天发现实在是闲的蛋疼,所以系统的学习了下多线程并发,线程这东西不是你工作了几年甚至十年,你没有深入的了解它。那么,你的知识体系还停留在儿童阶段,刚会行走,但是不能很稳定,跑步肯定不行。那么等你随着年龄增长和身体的成长,你的身体更加的强壮,以至你逐渐的可以大跑。
其实什么东西都一样,许多东西咱都停留在了表面,而没有深入的研究、学习,自然而然不行了。
起初刚刚接触java的时候,经常见到的是Thread和Runnable。这两个无论是工作还是学习,尤其是面试中经常遇到。我们只知道继承Thread或者实现Runnable然后重写run方法。然后调用线程的start方法来启动线程。然后在run方法中实现自己的业务代码。那么这太片面的,知识面太过于狭窄。如果十分满分那么你只能得一分。这表明你只是入门了,如果要进行复杂的业务逻辑,那么这些肯定不够。废话这么多,下面直接干货。
一、传统创建线程和启动线程的方式
1、Thread(线程的基础类)
创建线程:继承Thread、实现run方法、调用start方法。
其实总的来说只有Thread来创建线程。Thread只不过是实现了Runnable接口。重写了run方法。
而Thread构造方法中还需要传一个Runnable对象,可以是Thread(多态)也可以是其他实现了runnable或基础Thread的子类对象。不传则直接调用本类的run方法。
/* What will be run. */ 反编译Thread类代码
private Runnable target;
Thread类中9个构造方法:
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);
}
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);
}
浙公网安备 33010602011771号