您的位置:首页 > 编程语言 > Java开发

java线程启动三种方式

2017-09-13 11:08 393 查看
1、继承Thread,重写run()方法;

public class TestThread extends Thread{

public static void main(String[] args) {
TestThread myThread1=new TestThread();
TestThread myThread2=new TestThread();
myThread1.start();
myThread2.start();
}

public void run(){
System.out.println(Thread.currentThread().getName()+"线程开启");;
}
}2、实现Runnable接口,重写run()方法;
public class TestThread implements Runnable{

public static void main(String[] args) {
TestThread myThread1=new TestThread();
TestThread myThread2=new TestThread();
new Thread(myThread1).start();
new Thread(myThread2).start();
}

public void run(){
System.out.println(Thread.currentThread().getName()+"线程开启");
}
}
2、实现Callable接口(线程池)
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestThread implements Callable<String>{

public static void main(String[] args) throws Exception {
TestThread myThread1=new TestThread();
TestThread myThread2=new TestThread();
ExecutorService pool = Executors.newFixedThreadPool(2);
pool.submit(myThread1);
pool.submit(myThread2);
}

@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName()+"线程开启");
return Thread.currentThread().getName();
}
}

3.2实现Callable接口,用FutureTask取得call返回结果
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class TestThread implements Callable<String>{

public static void main(String[] args) throws Exception {
TestThread myThread1=new TestThread();
TestThread myThread2=new TestThread();
FutureTask<String> task1=new FutureTask<String>(myThread1);//取得call返回结果
FutureTask<String> task2=new FutureTask<String>(myThread2);//取得call返回结果
//FutureTask是Runnable接口子类,所以可用thread类接收task
new Thread(task1).start();
new Thread(task2).start();
//FutureTask父接口future可以接收线程执行完毕后的内容
System.out.println(task1.get());
System.out.println(task2.get());
}

@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName()+"线程开启");
return Thread.currentThread().getName();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程