1、实现线程的方式有2种,一种继承Thread类,另一种是实现runnable接口或者callable接口
下面是一个demo程序。
首先是一个实现Runnable接口的类
package com.xueyou.hystrixdemo.threaddemo;
import java.util.Date;
public class HelloWorldThreadRunner implements Runnable {
private int num;
@Override
public void run() {
System.out.println(num + " " + new Date());
}
public HelloWorldThreadRunner() {
}
public HelloWorldThreadRunner(int num) {
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
下面是一个实现callable接口的类,callable接口允许返回值
package com.xueyou.hystrixdemo.threaddemo;
import java.util.concurrent.Callable;
public class HelloWorldThreadCaller implements Callable<String> {
private String name = "";
@Override
public String call() throws Exception {
return name;
}
public HelloWorldThreadCaller() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HelloWorldThreadCaller(String name) {
this.name = name;
}
}
下面是执行两个线程的测试代码,需要注意的是,callable接口必须使用Executorservice进行调用
package com.xueyou.hystrixdemo.threaddemo;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class HelloWorldThreadDemo {
public static void main(String[] args) {
System.out.println(123);
Thread thread = new Thread(new HelloWorldThreadRunner(234));
thread.start();
ExecutorService exec = Executors.newSingleThreadExecutor();
Future<String> res = exec.submit(new HelloWorldThreadCaller("test"));
try {
System.out.println(res.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
exec.shutdown();
}
System.out.println(123);
}
}