文章目录
一、Java创建线程的方式
1、继承Thread类,然后重写run()方法
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running");
}
}
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
2、实现Runnable接口,并重写run()方法
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread running");
}
}
public class Main {
public static void main(String[] args) {
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
}
}
3、使用Callable和FutureTask
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception{
return "Thread running";
}
}
public class Main {
public static void main(String[] args) throws Exception{
MyCallable c = new MyCallable();
FutureTask<String> ft = new FutureTask<>(c);
Thread t = new Thread(ft);
t.start();
System.out.println(ft.get());
}
}
/*
* Callable的call()方法可以返回一个值。
* 需要使用FutureTask来包装Callable任务
* 然后将FutureTask对象传递给Thread类的构造函数来创建线程
*/
4、使用ExecutorService线程池
public class UseExecutorService {
public static void main(String[] args) {
ExecutorService poolA = Executors.newFixedThreadPool(2);
poolA.execute(()->{
System.out.println("4A......");
});
poolA.shutdown();
// 又或者自定义线程池
ThreadPoolExecutor poolB = new ThreadPoolExecutor(2, 3, 0,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3),
Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
poolB.submit(()->{
System.out.println("4B......");
});
poolB.shutdown();
}
}
严格来说,Java 就只有一种方式可以创建线程,那就是通过new Thread().start()创建。不管是哪种方式,最终还是依赖于new Thread().start()。
二、Go创建协程(Goroutine)的方式
1、使用 go 关键字:在函数调用前加上go关键字就可以启动一个新的Goroutine
go Function()
2、匿名函数:
go func() {
fmt.Println("Hello from Goroutine")
}()