首页 > 编程语言 >【JUC】1-Java线程的启动

【JUC】1-Java线程的启动

时间:2024-06-05 21:33:49浏览次数:28  
标签:JUC Java Thread thread void 线程 new public

以Thread创建线程为例:

1 Thread thread = new Thread() {
2             @Override
3             public void run() {
4                 log.info("create and start a thread through creating a Thread Object");
5             }
6         };
7thread. start();

跟踪start()方法的源码

 1 public synchronized void start() {
 2         /**
 3          * This method is not invoked for the main method thread or "system"
 4          * group threads created/set up by the VM. Any new functionality added
 5          * to this method in the future may have to also be added to the VM.
 6          *
 7          * A zero status value corresponds to state "NEW".
 8          */
 9         if (threadStatus != 0)
10             throw new IllegalThreadStateException();
11 
12         /* Notify the group that this thread is about to be started
13          * so that it can be added to the group's list of threads
14          * and the group's unstarted count can be decremented. */
15         group.add(this);
16 
17         boolean started = false;
18         try {
19             start0();
20             started = true;
21         } finally {
22             try {
23                 if (!started) {
24                     group.threadStartFailed(this);
25                 }
26             } catch (Throwable ignore) {
27                 /* do nothing. If start0 threw a Throwable then
28                   it will be passed up the call stack */
29             }
30         }
31     }

发现,实际调用的是start0()方法,而这个方法是一个本地方法;

 1 private native void start0(); 

想要了解这个方法的内部实现,就必须去查看jdk的源码了,是由C++进行实现的

 

 

1、Thread类启动线程

 1 /**
 2      * 通过创建Thread对象创建线程
 3      */
 4     private static void testCreateThread() {
 5         Thread thread = new Thread() {
 6             @Override
 7             public void run() {
 8                 log.info("create and start a thread through creating a Thread Object");
 9             }
10         };
11         thread. Start();
12     }

2、实现Runable接口

 1 /**
 2  * 创建和运行线程
 3  */
 4 @Slf4j(topic = "c.MyThread")
 5 public class MyThread02 {
 6     public static void main(String[] args) {
 7         testCreateThread();
 8     }
 9 
10     /**
11      * 通过实现Runnable接口创建线程
12      */
13     private static void testCreateThread() {
14         Task task = new Task();
15         task.run();
16     }
17 }
18 @Slf4j(topic = "c.Runnable")
19 class Task implements Runnable {
20     @Override
21     public void run() {
22         log.info("create and start a thread through implements Runnable interface");
23     }
24 }

3、FutureTask接口

 1     public static void main(String[] args) throws ExecutionException, InterruptedException {
 2         // 创建任务对象
 3         FutureTask<Integer> futureTask = new FutureTask(() ->{
 4             log.debug("hello");
 5             Thread.sleep(2000);
 6             return 100;
 7         });
 8         // 创建线程
 9         new Thread(futureTask,"t3").start();
10 
11         // 主线程阻塞,同步等待futureTask执行完毕的结果
12         Integer result = futureTask.get();
13         log.info("{}",result);
14     }

 

标签:JUC,Java,Thread,thread,void,线程,new,public
From: https://www.cnblogs.com/zhaohan258/p/18226821

相关文章

  • Java:实现使用CountDownLatch实现线程同步(附完整源码)
    Java:实现使用CountDownLatch实现线程同步我可以帮你实现使用CountDownLatch实现线程同步的Java代码。以下是一个简单的示例:​importjava.util.concurrent.CountDownLatch;​publicclassThreadSyncExample{publicstaticvoidmain(String[]args)t......
  • JavaScript第十讲:DOM编程(1):节点概念,如何获取元素节点,节点属性,样式
    前言在当今的Web开发中,DOM(DocumentObjectModel)编程扮演着至关重要的角色。DOM是HTML和XML文档的编程接口,它使得我们可以像操作对象一样来操作网页上的元素。无论是构建动态网页,还是实现用户交互,都离不开对DOM的深入理解和灵活运用。在本文中,我们将开启DOM编程的系列学习之旅......
  • Java_Mybatis
        Mybatis是一款优秀的持久层框架,用户简化JDBC(使用Java语言操作关系型数据库的一套API)开发使用Mybatis查询所有用户数据:代码演示:UserMapper:@Mapper//被调用时会通过动态代理自动创建实体类,并放入IOC容器中publicinterfaceUserMapper{@Select("sel......
  • JavaWeb_MySQL数据库
    数据库:MySQL数据模型:    MySQL是关系型数据库。SQL:简介分类:数据库设计-DDL对数据库操作:表操作:小练习:    创建下表SQL代码:createtabletb_user(idintprimarykeyauto_incrementcomment'ID,唯一标识',usernameva......
  • java安装
    java安装我在安装java时出现了安装失败,问题是,安装路径出现了中文。配置环境变量时,先配置JAVA_HOME,然后在PATH配置\bin和\jre。遇到的问题在安装一次java后,移动java文件夹到其他位置,更改环境变量后,在cmd窗口不能正常输出java版本publicclassHelloWorld{ publicstat......
  • 【华为OD】D卷真题200分:会议接待 JavaScript代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、python、Java、C、C++代码实现:【华为OD】D卷真题200分:会议接待JavaScript代码实现[思路+代码]-CSDN......
  • 【Java基础】 迭代器
    文章目录前言一、迭代器的概念二、迭代器的使用 三、迭代器的优势四、迭代器的技巧 1.使用增强的for循环(for-each)2. 使用迭代器的泛型3.只在必要时获取迭代器4.考虑并发性5.避免同时修改和遍历集合总结前言迭代器是一种在Java中常用的设计模式,用于......
  • ### 探索Java开发中的关键问题:从性能优化到安全性,全方位提升你的编程技能
    在这篇文章中,我们将深入探讨Java开发中最受关注的关键问题,并提供实用的解决方案,帮助你在编程之路上不断精进。以下是我们将覆盖的主要内容:1. **性能优化**     * **垃圾回收(GarbageCollection)**    * **问题**:不同垃圾回收器的选择和调优。......
  • 【Java】JVM字节码分析
    一、功能1、工作原理2、解释和运行jvm本质上是运行在计算机上的程序,负责运行java字节码文件对字节码文件中的指令,实时的解释成机器码,供计算机执行3、内存管理自动为对象、方法等分配内存自动垃圾回收机制,回收不再使用的对象4、即时编译在java中每次执行都需要实时解释......
  • eladmin-mp 低代码生成后台页面和服务端java代码接口调研
    概述总体这个项目前端使用vue2,后端使用springbootgit地址https://github.com/elunez/eladmin-mp预览地址https://eladmin.vip/demo/#/sys-tools/generator数据表配置低代码下载生成后的前端代码示例生成的后端代码示例:这里可以配置生成自动放在项目的目录......