Java并发编程(1)

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()

方法。这种方式在较复杂的程序中用的比较普遍。

猜你喜欢

转载自my.oschina.net/u/915753/blog/1555159