码迷,mamicode.com
首页 > 编程语言 > 详细

线程的创建和运行

时间:2015-04-18 22:13:47      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

Java提供了两种方式来创建线程:

  • 继承Thread类,并且覆盖run()方法。

  • 创建一个实现Runnable接口的类。使用带参数的Thread构造器来创建Thread对象。

这里我们只以Runnable接口为例:

package concurrency;

public class Test1 {
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i++) {
            Calculator calculator = new Calculator(i);
            Thread thread = new Thread(calculator);
            thread.start();
        }
    }
}

class Calculator implements Runnable {
    private int number;
    public Calculator(int number) {
        this.number = number;
    }
    @Override
    public void run() {
        for(int i = 1; i <= 10; i++) {
            System.out.printf("%s:  %d * %d = %d\n", 
                    Thread.currentThread().getName(),number,i,i*number);
        }
    }
}

当调用Thread对象的start()方法时,另一个执行线程将被创建。因而在我们的程序中,每次调用start()方法时,都会创建一个执行线程。

当一个程序的所有线程都运行完成时,更明确的说,当所有非守护(non-daemon)线程都运行完成的时候,这个Java程序将宣告结束。如果初始线程(执行main()方法的线程)结束了,其余的线程仍将继续执行直到它们运行结束。如果某一个线程调用了System.exit()指令来结束程序的执行,所有的线程都将结束。

对一个实现了Runnable接口的类来说,创建Thread对象并不会创建一个新的执行线程;同样的,调用它的run()方法,也不会创建一个新的执行线程。只有调用它的start()方法时,才会创建一个新的执行线程。

编写一个类并继承Thread类,在这个类里覆盖run()方法,然后创建这个类的对象,并且调用start()方法,也会创建一个执行线程,如例:

package concurrency;

public class Test2 extends Thread {
    private int number;
    public Test2(int number) {
        this.number = number;
    }
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i++) {
            Test2 thread = new Test2(i);
            thread.start();
        }
    }
    @Override
    public void run() {
        for(int i = 1; i <= 10; i++) {
            System.out.printf("%s:  %d * %d = %d\n", 
                    Thread.currentThread().getName(),number,i,i*number);
        }
    }
}


线程的创建和运行

标签:

原文地址:http://my.oschina.net/fhd/blog/403397

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!