1.线程创建方式:
1.1继承 Thread 创建线程
继承 java.lang.Thread 类创建线程是最简单的一种方法,也最直接。下面创建一个MyThread1 类,继承 Thread,重写其 run()方法。并在 main()方法中创建多个并发线程
public class MyThread1 extends Thread {
public MyThread1(String name) {
super(name);//传递线程的名字
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) { //创建5个线程
new MyThread1("thread" + i).start();
}
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {//输出线程名字和i
System.out.println(this.getName() + ":" + i);
}
}
}
这种创建方式,把线程执行的逻辑代码直接写在了 Thread 的子类中,这样根据线程的
概念模型,虚拟 CPU 和代码混合在一起了。并且 java 是单继承机制,线程体继承 Thread
类后,就不能继承其他类了,线程的扩展受影响。
1.2.实现 Runnable 接口创建线程
public class MyThreadTarget implements Runnable {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
//创建线程目标对象
Runnable r = new MyThreadTarget();
//把目标对象传递个Thread,即虚拟的cpu
new Thread(r, "thread" + i).start();
}
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":"+ i);
}
}
}
从程序中可以看出线程目标对象和 Thread 分开了,并传递给了 Thread。如果有比较复
杂的数据要处理,可以在线程目标对象中引入数据。使用这种方式获得线程的名字就稍微复
杂一些,需要使用到 Thread 中的静态方法,获得当前线程对象,然后再调用 getName()
方法。这种方式在较复杂的程序中用的比较普遍。