首页 > 编程语言 >随笔(四)『Java多线程(创建线程方式)』

随笔(四)『Java多线程(创建线程方式)』

时间:2022-12-08 15:34:15浏览次数:43  
标签:Java System 线程 println static 多线程 public out

1、创建线程方式一:『继承Thread类』

/**
 * 创建线程方式一:『继承Thread类』
 */
public class ThreadTest {

    public static class MyThread extends Thread{
        @Override
        public void run() {
            System.out.println("我是通过继承Thread类实现的。");
        }
    }

    public static void main(String[] args) {
        System.out.println("=== 主线程 开始 ===");

        MyThread myThread = new MyThread();
        myThread.start();

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

2、创建线程方式二:『实现Runnable接口』

/**
 * 创建线程方式二:『实现Runnable接口』
 */
public class RunnableTest {

    public static class MyRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println("我是通过实现Runnable接口实现的。");
        }
    }

    public static void main(String[] args) {
        System.out.println("=== 主线程 开始 ===");

        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();

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

3、创建线程方式三:『实现CallTable接口』, 需要与FutureTask配合

/**
 * 创建线程方式三:『实现CallTable接口』, 需要与FutureTask配合
 */
public class CallableTest {

    public static class MyCallable implements Callable{
        @Override
        public Object call() throws Exception {
            System.out.println("我是通过实现Callable接口实现的。");
            return "中国,我爱你!";
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("=== 主线程 开始 ===");

        MyCallable myCallable = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();

        String result = null;
//        result = futureTask.get(); // get()是阻塞等待的,只有线程执行结束才能获取到返回结果
        System.out.println("得到结果为:" + result);

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

4、创建线程方式四:『通过线程池』,将任务提交给线程池

/**
 * 创建线程方式四:『通过线程池』,将任务提交给线程池
 */
public class ThreadPoolTest {

    // 创建一个指定线程数的线程池
    public static ExecutorService executor = Executors.newFixedThreadPool(5);

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("=== 主线程 开始 ===");

//        executor.execute(() -> System.out.println("我是通过线程池创建的。")); // execute() 没有返回值

        Future<String> future =  executor.submit(() -> {return "我是通过线程池创建的。";}); // submit() 有返回值
        System.out.println(future.get());

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

标签:Java,System,线程,println,static,多线程,public,out
From: https://www.cnblogs.com/xiaonuanxin/p/16966215.html

相关文章

  • Java单例模式的最佳实践?
    “读过书,……我便考你一考。茴香豆的茴字,怎样写的?”——鲁迅《孔乙己》0x00大纲目录0x00大纲0x01前言0x02单例的正确性new关键字clone方法克隆反序列化反射0x03最......
  • javascript-代码随想录训练营day14
    递归的三要素:递归函数的参数和返回值单层递归的逻辑终止条件144.二叉树的先序遍历题目链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/题目描......
  • 多线程的原子性,可见性,有序性
    java内存模型定义了主存,工作内存等这些抽象概念,底层对应着cpu寄存器,缓存,cpu指令优化等。由此引出了原子性,可见性,有序性一、原子性保证指令不会受到上下文切换的影响而......
  • (java 实现开箱即用基于 redis 的分布式锁
    项目简介lock为java设计的分布式锁,开箱即用,纵享丝滑。开源地址:https://github.com/houbb/lock目的开箱即用,支持注解式和过程式调用基于redis的分布式锁内......
  • java 大文件分片上传处理
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......
  • Where is the “Father of Java?”
    Thisarticlewasoriginallypostedby ​​TylerHamilton​​ inthe ​​Toronto Star​​.Itisn’toftenthatweremembertheoriginatorsofideasandprod......
  • Java自学之路
    JAVA自学之路一:学会选择为了就业,不少同学参加各种各样的培训。 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机、嵌入式、游戏、3G、测试等。那么究竟应该选......
  • 使用JavaHTTPClient发送请求
    importorg.apache.http.Header;importorg.apache.http.HttpEntity;importorg.apache.http.HttpHeaders;importorg.apache.http.client.config.RequestConfig;impo......
  • java 异步总线guava eventBus
    参见: https://blog.csdn.net/winy_lm/article/details/88076968?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDI......
  • JavaScript入门⑧-事件总结大全
    JavaScript入门系列目录JavaScript入门①-基础知识筑基JavaScript入门②-函数(1)基础{浅出}JavaScript入门③-函数(2)原理{深入}执行上下文JavaScript入门④-万物皆......