方式一:继承Thread
public class Way01 extends Thread{
public Way01(String name) {
super(name);
}
@Override
public void run() {
while (!interrupted()){
MyTool.printTimeAndThread(getName() + "执行了...");
}
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
MyTool.printTimeAndThread(getName() + "睡眠中被打断...");
e.printStackTrace();
}
}
public static void main(String[] args) {
Way01 t1 = new Way01("t1");
Way01 t2 = new Way01("t2");
t1.start();
t2.start();
}
}
方式二:实现Runnable接口
public class Way02 implements Runnable{
@Override
public void run() {
while (true){
MyTool.printTimeAndThread("被执行了...");
}
}
public static void main(String[] args) {
Thread thread = new Thread(new Way02(),"way02");
thread.start();
}
}
方式三:Thread + 匿名内部类
public class Way03 {
public static void main(String[] args) {
new Thread("t1"){
@Override
public void run() {
System.out.println("线程执行了...");
}
}.start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程执行了...");
}
},"t2").start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("runnable run 线程执行了...");
}
},"t3"){
@Override
public void run() {
System.out.println("override run 线程执行了...");
}
}.start();
}
}
方式四:java8 Lambda 创建线程
public class Way07 {
public static void main(String[] args) {
Thread thread = new Thread(() ->{
MyTool.printTimeAndThread("创建Runnable对象并重写run方法,数创建Thread对象!");
},"t1");
thread.start();
}
}
方式五:Thread + FuturnTask + Callable(可获取返回值)
public class Way04 implements Callable {
@Override
public Object call() throws Exception {
Integer integer = new Integer(1);
MyTool.printTimeAndThread("其他业务处理...返回值为:"+integer);
return integer;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
Way04 callable = new Way04();
FutureTask<Integer> futureTask = new FutureTask<Integer>(callable);
Thread thread = new Thread(futureTask);
thread.start();
Integer o = futureTask.get();
MyTool.printTimeAndThread("获取到的结果为:" + o);
}
}
方式六:Timer + 匿名内部类
public class Way05 {
public static void main(String[] args) {
Timer timer = new Timer("Timer");
timer.schedule(new TimerTask() {
@Override
public void run() {
MyTool.printTimeAndThread("线程启动执行了...");
}
},1000,1000);
}
}
方式七: 线程池 + 任务
public class Way06 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(8);
for (int i = 0; i < 8; i++) {
executorService.submit(new Runnable() {
@Override
public void run() {
MyTool.printTimeAndThread(Thread.currentThread().getName()+"执行了....");
}
});
}
executorService.shutdown();
}
}
打印工具类
public class MyTool {
public static void sleepMillis(Long millis){
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void sleep(int i) {
try {
TimeUnit.SECONDS.sleep(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void printTimeAndThread(String tag){
String result = new StringJoiner("\t|\t")
.add(String.valueOf(Instant.now()))
.add(String.valueOf(System.currentTimeMillis()))
.add(String.valueOf(Thread.currentThread().getId()))
.add(Thread.currentThread().getName())
.add(tag)
.toString();
System.out.println(result);
}
public static void sleep(double i) {
try {
TimeUnit.MILLISECONDS.sleep((int) (i * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}