创建线程的三种方式

    技术2022-07-11  103

    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); }

    线程的生命周期:

    创建线程 :还未执行start()方法就绪状态 :执行了start()方法,但未获取到cpu的执行权运行状态 :获取到cpu执行权阻塞状态 :sleep()/其它阻塞方法死亡状态 :run()方法运行结束
    Processed: 0.012, SQL: 9