首页 > 其他分享 >创建线程的方式

创建线程的方式

时间:2024-04-06 16:58:42浏览次数:18  
标签:方式 创建 System 线程 println import main public

创建线程的方式

1.Class Thread
package com.lisus2000.style;

public class Test01 extends Thread{
    @Override
    public void run() {
        System.out.println("继承Thread类,重写run方法实现线程.");
    }

    public static void main(String[] args) throws InterruptedException {
        //创建线程
        Test01 t1 = new Test01();
        //启动线程 (一定要调start方法)
        t1.start();

        //创建线程
        Test01 t2 = new Test01();
        //启动线程
        t2.start();

        Thread.sleep(10L);

        //main线程执行
        System.out.println("main方法执行");
    }
}
2.Interface Runnable
package com.lisus2000.style;

/**
 * 线程创建方式二:实现Runnable接口,实现run方法
 *
 */
public class Test02 implements Runnable {

    @Override
    public void run() {
        System.out.println("实现Runnable接口,覆盖run方法实现线程.");
    }

    public static void main(String[] args) {
        //创建线程
        Thread t1 = new Thread(new Test02());
        //启动线程
        t1.start();

        //创建线程
        Thread t2 = new Thread(new Test02());
        //启动线程
        t2.start();

        //main线程执行
        System.out.println("main方法执行");
    }
}

3.Interface Callable
package com.lisus.sytle;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 线程创建方式三:实现Callable接口,实现call()方法
 */
public class Test03 implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "Thread execute.txt finished";
    }

    public static void main(String[] args) {
        //创建线程
        FutureTask<String> futureTask=new FutureTask<>(new Test03());
        //启动线程
        new Thread(futureTask).start();
        try {
            //等待任务执行完毕,并返回结果
            String result = futureTask.get();

            System.out.println(result);

        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        //main线程执行
        System.out.println("main方法执行");
    }
}
4.Executors
package com.lisus.sytle;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程创建方式四:基于线程池的方式实现
 *
 */
public class Test04 implements Runnable{
    @Override
    public void run() {
        System.out.println("线程执行");
    }

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        for (int i=0;i<10;i++){
            Test04 thread=new Test04();
            executorService.execute(thread);
        }
        //关闭线池程
        executorService.shutdown();
        //main线程执行
        System.out.println("main方法执行");
    }
}
5.ThreadPoolTaskExecutor
package com.bjpowernode.style;

import com.bjpowernode.service.MyService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@ComponentScan(basePackages = {"com.lisus2000.service"})
@EnableAsync
public class Test05 {

    public static void main(String[] args) {

        ConfigurableApplicationContext context = SpringApplication.run(Test05.class);

        //<bean id="applicationTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">

        //ThreadPoolTaskExecutor applicationTaskExecutor = context.getBean(ThreadPoolTaskExecutor.class);

        //applicationTaskExecutor.execute.txt(() -> System.out.println("异步线程执行1......"));

        //applicationTaskExecutor.submit(() -> System.out.println("异步线程执行2......"));

        MyService myService = context.getBean(MyService.class);
        myService.test2();

        System.out.println("主线程执行结束......");
    }
}

标签:方式,创建,System,线程,println,import,main,public
From: https://blog.csdn.net/lisus2007/article/details/137432277

相关文章

  • 线程等待通知机制
    join()是等待线程结束。wait是等待线程通知,并不一定是执行结束。能更加精细的控制线程执行的顺序。在什么情况下使用线程等待通知呢?“线程饿死问题”,一个线程频繁的获取锁和释放锁,由于获取锁的速度太快,其他的线程抢不到,那么就会影响到代码的执行速度。而等待通知机制就......
  • Python哪种方式循环最快,或许颠覆你的认知!
    众所周知,Python不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为1个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。while 和 for 是Python中常用的两种实现循环的关键字,它们的运行......
  • 通过CSS设置元素水平垂直居中的方式大全
    元素水平垂直居中方法方案一、弹性盒子沿主轴和侧轴居中.outer{width:400px;height:400px;background-color:#888;display:flex;justify-content:center; align-items:ceter;}.inner{width:100px;height:100px;ba......
  • 理解进程和线程
    一.进程和线程进程和线程的存在目的都是为了实现并发执行,提高系统的资源利用率和响应速度。进程概念:​ 自己话理解,进程就是,一个程序,当操作系统执行时,让他成为了一个动起来的实体,此时这个活动的实体就是进程。进程是程序执行时的一个实例。每个进程都有自己的地址空间、内......
  • 并发编程(二):线程安全检查工具
    对于验证代码是否是线程安全,往往是十分困难的,有一些工具可以帮我们简化这项任务,以尽可能保证并发的正确性。ThreadSanitizer谷歌出品,内置于编译器的一种线程安全分析工具,使用方法就是在编译时加上-fsanitize=thread配置项即可。现在来简单尝试分析如下代码:#include<th......
  • CSS隐藏元素的多种方式
    CSS中隐藏元素有多种方式,主要区别在于元素隐藏后是否占据空间以及是否会对文档流产生影响。1.display:none完全隐藏元素,不占据任何空间。.demo{display:none;}2.visibility:hidden隐藏元素,但仍占据空间。.demo{visibility:hidden;}3.opacity:0......
  • 多线程(33)ConcurrentHashMap
    ConcurrentHashMap是Java并发包中提供的一个线程安全的哈希表实现。与传统的同步容器相比,ConcurrentHashMap通过一种分段锁的机制实现了更高的并发度。本节将深入探讨其设计原理,结合源码进行分析,并通过代码示例来演示其使用方法。设计原理ConcurrentHashMap的设计理......
  • 多线程(34)CopyOnWriteArrayList
    CopyOnWriteArrayList是Java中一个线程安全的ArrayList变体,属于java.util.concurrent包。它通过在所有修改操作(如add,set等)上执行显式复制来实现线程安全。这种设计适用于列表读操作的数量远远大于写操作的场景。设计原理CopyOnWriteArrayList的基本思想是,每当......
  • linux创建新分区扩展磁盘空间
    sudofdisk/dev/sda在fdisk中按下n键创建新分区。选择分区类型(通常是主分区)并输入默认的分区编号4。确保新分区的起始扇区是/dev/sda3结束的下一个扇区。设置分区结束扇区为默认值以占用剩余的空间。将分区类型设置为LVM或者其他你需要的文件系统类型。保存并退......
  • C#-多线程
    线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。线程是**轻量级进程**。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了C......