thread
原理
实现多线程有两种方法,第一个方法是使用继承thread,使用thread子类来创建线程,第二种是使用runnable接口。
第一个比较简单,其实thread也是有接口的,通过查thread类可以发现,在最前面有1
2public
class Thread implements Runnable {
说明他也是用到Runnable接口的.thread的子类重写了run方法,然后thread又是用到Runnable接口。这才实现了线程。
而使用第二个方式时候设计到一个东西:1
2
3public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
接着看1
2
3
4
5
6
public void run() {
if (target != null) {
target.run();
}
}
例如1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class MyThread implements Runnable{
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
MyThread myThread =new MyThread();
Thread t1 = new Thread(myThread) ;
t1.start();
Thread t2 = new Thread(myThread) ;
t2.start();
}
}
我们给thread传了一个参数(myThread对象),所有它的target!=null。 所以thread类调用的是target的run方法(即这里的myThread的run方法)。
注意
1.线程执行需要使用start方法,不能用run方法
比较:
1.实现的方式没有内地单继承性的局限性
2.实现的方式更适合来处理多个线程共享数据的情况
相同点:
都需要重写run方法,线程要执行的逻辑声明在run方法中。都使用start启动