目录
4.含返回值且可抛出异常的线程创建启动方式,实现Callable 接口
6.线程池的实现(java.util.concurrent.Executor接口),线程池其他介绍下个文章介绍
1.实现Runnable接口,重写run()
package org.hornet.thread;
/*
* 实现Runnable接口,重写run()
*/
public class ThreadDemo1 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" Runnable实现线程正在执行...");
}
public static void main(String[] args) {
Thread thread1 = new Thread(new ThreadDemo1());
Thread thread2 = new Thread(new ThreadDemo1());
thread1.start();
thread2.start();
}
}
2.继承Thread类,重写run()方法
package org.hornet.thread;
/*
* 继承Thread类,重写run()方法
*/
public class ThreadDemo2 extends Thread{
public void run() {
System.out.println(getName()+" 线程正在执行...");
}
public static void main(String[] args) {
ThreadDemo2 demo1 = new ThreadDemo2();
ThreadDemo2 demo2 = new ThreadDemo2();
demo1.start();
demo2.start();
}
}
3.匿名内部类
package org.hornet.thread;
/*
* 匿名内部类
*/
public class ThreadDemo3 {
public static void main(String[] args) {
//方式1:相当于继承了Thread类,作为子类重写run()实现
new Thread() {
public void run() {
System.out.println("匿名内部类创建线程方式Thread...");
};
}.start();
//方式2:实现Runnable,Runnable作为匿名内部类
new Thread(new Runnable() {
public void run() {
System.out.println("匿名内部类创建线程方式Runnable...");
}
} ).start();
}
}
4.含返回值且可抛出异常的线程创建启动方式,实现Callable<T> 接口
package org.hornet.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*
* 含返回值且可抛出异常的线程创建启动方式,实现Callable<T> 接口
*/
public class ThreadDemo4 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("新建线程开始事情");
Thread.sleep(2000);
return "新建线程做事情的结果";
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
ThreadDemo4 d = new ThreadDemo4();
/*
call()只是线程任务,对线程任务进行封装
class FutureTask<V> implements RunnableFuture<V>
interface RunnableFuture<V> extends Runnable, Future<V>
*/
FutureTask<String> task = new FutureTask<>(d);
Thread t = new Thread(task);
t.start();
System.out.println("提前完成任务...");
//获取任务执行后返回的结果
String result = task.get();
System.out.println("线程执行结果为:"+result);
}
}
5.Java定时器(java.util.Timer)
package org.hornet.thread;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutionException;
/*
* Java定时器(java.util.Timer)
*/
public class ThreadDemo5 {
static void threadDoSth(){
System.out.println(Thread.currentThread().getName()+" 定时任务延迟0(即立刻执行),每隔1000ms执行一次...");
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
threadDoSth();
}
}, 0, 1000);
}
}
6.线程池的实现(java.util.concurrent.Executor接口),线程池其他介绍下个文章介绍
package org.hornet.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* 线程池的实现(java.util.concurrent.Executor接口),线程池其他介绍下个文章介绍
*/
public class ThreadDemo6 {
static void threadDoSth(){
System.out.println(Thread.currentThread().getName()+" 正在运行...");
}
public static void main(String[] args) throws Exception {
//创建带有8个线程的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(8);
//执行10次逻辑
for(int i = 0 ;i < 10 ; i++) {
threadPool.execute(new Runnable() {
public void run() {
threadDoSth();
}
});
}
//运行完毕,需要销毁线程池
threadPool.shutdown();
System.out.println("线程池已销毁");
}
}