github地址: https://github.com/lishanglei/thread-demo.git
继承Thread类
public class ExtendsThread extends Thread{ @Override public void run() { for(int i=0;i<20;i++){ System.out.println("线程开启了"+i); } } } @Test public void test1(){ ExtendsThread thread =new ExtendsThread(); ExtendsThread thread1 =new ExtendsThread(); thread.start(); thread1.start(); }实现Runnable接口
public class ImplementsRunnable implements Runnable { @Override public void run() { for(int i=0;i<20;i++){ System.out.println("通过实现Runnable方式创建的线程开启了"+i); } } } @Test public void test2(){ ImplementsRunnable runnable =new ImplementsRunnable(); ImplementsRunnable runnable1 =new ImplementsRunnable(); Thread thread =new Thread(runnable); Thread thread1 =new Thread(runnable); thread.start(); thread1.start(); }实现Callable接口
public class ImplementsCallable implements Callable<String> { @Override public String call() throws Exception { for(int i=0;i<20;i++){ System.out.println("实现Callable接口创建的线程开启了"+i); } //返回值就表示线程运行完毕之后的结果 return "实现Callable接口创建的线程运行完毕"; } } @Test public void test3() throws ExecutionException, InterruptedException { ImplementsCallable callable=new ImplementsCallable(); FutureTask<String> futureTask =new FutureTask<>(callable); FutureTask<String> futureTask1 =new FutureTask<>(callable); Thread thread =new Thread(futureTask); Thread thread1 =new Thread(futureTask1); thread.start(); thread1.start(); //获取线程运行结果,如果线程运行结束,get()方法会一直死等 String result =futureTask.get(); System.out.println(result); }