java之线程创建和启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之线程创建和启动相关的知识,希望对你有一定的参考价值。

线程的创建有三种方法:一是继承Thread类创建线程,二是实现Runnable接口,三是使用Callable和Future创建线程。

继承Thread类创建线程

  步骤:

  • 定义Thread子类,并重写该类的run方法,run方法代表将要完成的任务,也就是线程执行体
  • 创建Thread实例
  • 调用Thread子类的start()方法启动线程
 1 public class ThreadTest extends Thread{
 2     
 3     private int i;
 4     
 5     public void run(){
 6         
 7         for( ;i < 100 ; i++ ) {
 8             //getName()返回当前线程的名字
 9             System.out.println(getName() + " " + i) ;
10         }
11         
12     }
13     
14     
15     public static void main(String[] args) {
16         
17         for(int i = 0; i < 100; i++){
18             //获取当前线程
19             System.out.println(Thread.currentThread().getName()
20                     +" " +i);
21             if(i == 20){
22                 new ThreadTest().start();
23                 new ThreadTest().start();
24             }
25         }
26     }
27 
28 }

实现Runnable接口创建线程

步骤:

  • 定义Runnable实现类,并重写该类烦人run方法,该run方法同样是线程执行体》
  • 创建Runnable子类的实例,并以此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象

  

 1 public class ThreadTest implements Runnable{
 2     
 3     private int i;
 4     
 5     public void run(){
 6         
 7         for( ;i < 100 ; i++ ) {
 8             //当线程实现类用Runnable时,如果要获取当前线程
 9             //只能用Thread.currentThread()
10             System.out.println(Thread.currentThread().getName()
11                     +" " +i);
12         }
13         
14     }
15     
16     
17     public static void main(String[] args) {
18         
19         for(int i = 0; i < 100; i++){
20             //获取当前线程
21             System.out.println(Thread.currentThread().getName()
22                     +" " +i);
23             if(i == 20){
24                 ThreadTest st=    new ThreadTest();
25                 //通过new thread(target ,name)创建真正的线程对象
26                 new Thread(st, "线程1").start();
27                 new Thread(st, "线程2").start();
28             }
29         }
30     }
31 
32 }

使用callable和Future创建线程

查看 http://blog.csdn.net/ghsau/article/details/7451464

创建线程的三种方式对比

采用实现Runnable、Callable接口的方式创见多线程时,优势是:

线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。

在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

劣势是:

编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

使用继承Thread类的方式创建多线程时优势是:

编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

劣势是:

线程类已经继承了Thread类,所以不能再继承其他父类。

以上是关于java之线程创建和启动的主要内容,如果未能解决你的问题,请参考以下文章

java基础之多线程总结一(创建状态synchronized和volatile)

java基础之多线程总结一(创建状态synchronized和volatile)

并发编程解惑之线程

java基础之多线程知识懂多少

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

Java基础之多线程