在 Java程序中,有三种种方法创建线程:
(1)继承Thread类,重写Thread类中的run()方法,直接创建线程;
(2)实现Runnable接口,在通过Thread类和Runnable的实现类间接创建一个线程;
(3)使用Callable和Future接口间接创建线程。
线面分别用着三种方法创建线程:
1.继承Thread类
package cn.mesie.thread; public class MyThread extends Thread { // 重写run方法 @Override public void run() { for(int i = 0;i < 100;i++){ System.out.println(this.getName() + ":" + i); } } public static void main(String[] args) { //创建线程 MyThread mt = new MyThread(); //启动线程 mt.start(); //住线程任务 for (int i = 1000;i < 1010;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } } }
2.实现Runnable接口:
package cn.mesie.thread; public class MyThread01 implements Runnable { //重写run方法 @Override public void run() { for(int i = 0;i < 100;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } } public static void main(String[] args) { //创建线程 Thread mt = new Thread(new MyThread01()); //启动线程 mt.start(); //住线程任务 for (int i = 1000;i < 1010;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } } }
3.使用Callable和Future接口:
package cn.mesie.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MyThread02 implements Callable<Integer> { //实现call方法 @Override public Integer call() throws Exception { int i = 0; for(;i < 100;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } return i; } public static void main(String[] args) { //调用FutureTask类包装的Callable实现类的实例 FutureTask<Integer> task = new FutureTask<Integer>(new MyThread02()); new Thread(task,"子线程").start(); try { System.out.println("子线程返回值:" + task.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } //住线程任务 for (int i = 1000;i < 1010;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } } }