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();
}
}
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();
}
}
相关文章推荐
- java 启动线程三种方式
- java 启动线程三种方式
- java 启动线程三种方式
- java 启动线程三种方式
- java 启动线程三种方式
- java 启动线程三种方式
- java 启动线程三种方式
- Java 启动线程三种方式
- java 启动线程三种方式
- java创建线程的三种方式及其对比
- 并发编程学习总结(一) :java 创建线程的三种方式的优缺点和实例
- java线程:三种方式实现生产者消费者问题_2
- Java创建线程的三种方式
- JAVA并发编程学习笔记------线程的三种创建方式
- java创建线程的三种方式及其对比
- java启动线程的3种方式对比分析
- java线程:三种方式实现生产者消费者问题_1
- Java线程创建的三种方式
- java创建线程的三种方式
- java线程通信的三种方式