首页 > 编程语言 >java中四种创建线程的方式

java中四种创建线程的方式

时间:2023-02-23 15:24:17浏览次数:35  
标签:java System 线程 println main public 四种 out

第一种方式:通过编写类继承Thread,重写run方法实现
 
实现实例:

public class ThreadTest {
    public static void main(String[] args) {
        System.out.println("main方法开始");
        Thread01 thread01 = new Thread01();
        thread01.start();
        System.out.println("main方法结束");
    }

    /**
     * 创建线程的第一种方式
     */
    public static class Thread01 extends Thread{
        @Override
        public void run() {
            System.out.println("第一种创建线程的方式:通过继承Thread的方式,再通过start方式开启线程!!");
        }
    }
}

 
执行结果:

 
第二种方式:通过实现Runnable接口实现
 
实现实例:

public class ThreadTest {
    public static void main(String[] args) {
        System.out.println("main方法开始");
        new Thread(new Runnable01()).start();
        System.out.println("main方法结束");
    }

    /**
     * 创建线程的第二种方式
     */
    public static class Runnable01 implements Runnable{
        @Override
        public void run() {
            System.out.println("创建线程的第二种方式:通过实现Runnable接口");
        }
    }
}

执行结果:

 
第三种创建线程的方式:通过实现Callable接口,连同FutureTask一同使用
 
实例代码:

public class ThreadTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("main方法开始");
        FutureTask<String> futureTask = new FutureTask<>(new Callable01());
        new Thread(futureTask).start();
        System.out.println("main方法结束,线程执行的结果为:->"+futureTask.get());
    }

    /**
     * 第三种创建线程的方式
     */
    public static class Callable01 implements Callable<String>{
        @Override
        public String call() throws Exception {
            String msg="第三种创建线程的方式:通过实现Callable接口实现,这种方式的特点是可以连同FutureTask一同使用,可获取业务执行之后的结果!";
            return msg;
        }
    }
}

结果:

 
第四种创建线程的方式:通过创建线程池实现创建
实例:

public class ThreadTest {
    static ExecutorService service = Executors.newFixedThreadPool(2);//实例创建的为使用的固定线程的线程池
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("main方法开始");
        service.execute(new Runnable01());//传入一个Runable对象
        service.shutdown();//关闭线程池
        System.out.println("main方法结束");
    }
}

 
 
 
区别:
第一种方式和第二种方式不能得到返回值,第三种方式可以获取返回值(Runnable也可以联合Future获取返回值)
第一二三种方式都不能控制资源
第四种方式可以可以控制资源,性能稳定

标签:java,System,线程,println,main,public,四种,out
From: https://www.cnblogs.com/just1t/p/17148076.html

相关文章

  • Android----->多线程的实现Thread、IntentService的运用
       首先建立一个Intent.xml <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"......
  • 多线程
    一、多线程介绍1、Java中创建线程的方法3种:Thread、Runnable、Callable继承Thread类(Thread类本身就是实现Runnable接口的)实现Runnable接口实现Callable接口2、继承......
  • 【HashMap】HashMap多线程下的死循环问题及JDK8版本的修复
    背景想要记录一下关于jdk下的hashmap存在的一些问题:1、许多同学都知道JDK下的HashMap是线程不安全的,但究竟是怎样个不安全法,在多线程下会出现怎样的问题?其中原因是......
  • Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解
    Java”框架=注解+反射+设计模式“之反射详解每博一文案无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受。——————《......
  • JavaScript Boolean
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *Boolean布尔值 * 布尔值只有两......
  • TFlite 多线程并行
    importnumpyasnpfrommultiprocessingimportProcess,Queuedefprocess_data(data,model_TSNet,tsnet_input,tsnet_output,queue):model=tflite_runti......
  • java 文件字节输入流
      Example10_4.javaimportjava.io.*;publicclassExample10_4{publicstaticvoidmain(Stringargs[]){intn=-1;byte[]a=newbyte[1......
  • java 创建一个File文件对象
      Example10_1.javaimportjava.io.*;publicclassExample10_1{publicstaticvoidmain(Stringargs[]){Filef=newFile("C:\\ch10","Example......
  • c++线程的使用
    c++11之后,c++语言提供了并发编程的语言支持。c++11增加了线程以及线程相关的类。c++11提供的线程类叫做std::thread,创建线程只需提供线程函数或者函数对象,并且可以指定参......
  • java 面向接口编程
        Advertisement.javapublicinterfaceAdvertisement{//接口publicvoidshowAdvertisement();publicStringgetCorpName();}Advertis......