线程运行如何启动?

2024-07-01

我正在寻找一个关于线程的小例子。为了创建线程,我们可以通过两种方式来实现:Runnable接口或通过扩展Thread。我使用第一种方式

package test;

public class test implements Runnable{
    public static void main(String args[])
    {
        test t=new test();
        t.run();Thread th=Thread.currentThread();
        th.start();
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("hi");
    }
}

我的疑问是当我们打电话时th.start(); then run()被称为。我想知道如何。我内心想start()可能正在打电话run()所以我查看了 Thread 类的文档

以下是start()Thread类中的声明

public synchronized void start() {
    /**
     * This method is not invoked for the main method thread or "system"
     * group threads created/set up by the VM. Any new functionality added
     * to this method in the future may have to also be added to the VM.
     *
     * A zero status value corresponds to state "NEW".
     */
    if (threadStatus != 0)
        throw new IllegalThreadStateException();

    /* Notify the group that this thread is about to be started
     * so that it can be added to the group's list of threads
     * and the group's unstarted count can be decremented. */
    group.add(this);

    boolean started = false;
    try {
        start0();
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
            /* do nothing. If start0 threw a Throwable then
              it will be passed up the call stack */
        }
    }
}

正如你在里面看到的start(),run()没有被调用,但是当我们调用时th.start()然后自动覆盖run()被称为。有人可以解释一下吗


其机制是run在新线程上调用方法是语言外的:它不能用Java代码表示。这是关键的一行start method:

    start0();

start0是一个本机方法,其调用将:

  • 导致创建一个新的本机执行线程;
  • 导致run要在该线程上调用的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程运行如何启动? 的相关文章

  • Java中无法到达的语句编译错误[重复]

    这个问题在这里已经有答案了 class For1 public static void main String args int a 0 for break System out println a Line 1 a Line 2 我知道第
  • android下拉刷新列表视图出错

    我正在使用功能下拉来刷新library https github com chrisbanes Android PullToRefresh克里斯班斯的 但是当我尝试在我的 xml 文件中导入这个小部件时 它向我显示以下错误 请帮助我如何解决
  • 如果没有发生触摸事件,Android SurfaceView 会变慢

    我正在制作一款游戏 除了游戏循环之外一切都很顺利 我正在使用 SurfaceView 并绘制 2D Sprites 位图 目前游戏是一艘穿过小行星带的飞船 飞船停留在屏幕中央 手机向任一方向倾斜以移动小行星 小行星改变位置而不是玩家 当旧的
  • 使用 ThreadCount TestNG 限制并行测试的数量

    我在这里很头疼 我不知道如何处理这个问题 我有几个通过 xml 运行的测试类 约90个测试班 每个班约10 Test进入其中 我配置了一个硒网格 带有maxSession 5因此 单个节点上最多可以并行运行 5 个并行浏览器实例 这是我不明
  • Spring Boot数据休息中的日期问题

    当我处理日期时 我遇到了春季数据休息的问题 简而言之 就是推迟一天的日期 例如 如果我有 1111 11 11 它会返回给我 1111 11 10 SO 中有一些相关的帖子 ex1 https stackoverflow com quest
  • FlyingSaucer renderer.setDocument 抛出“流已关闭”异常

    我在使用找到的简单示例创建 PDF 时遇到问题here http today java net pub a today 2007 06 26 generating pdfs with flying saucer and itext html
  • 使用 Jackson 反序列化非字符串映射键

    我有一张如下所示的地图 public class VerbResult JsonProperty similarVerbs private Map
  • 无法找到“org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder”类型的 bean

    我想通过创建一个简单的登录屏幕来在我的项目中使用 Spring Boot Security 但即使我为 BCryptPasswordEncoder 定义了一个 bean 我也会收到这些错误 完整的错误是 bCryptPasswordEnco
  • 关于final关键字的java基础知识

    方法中可以使用final关键字吗 绝对地 这final关键字几乎可以应用于任何事物 在每种情况下都意味着 您无法再更改它 这就是它应用于时的含义 一个变量 您根本无法为变量分配新值 将其呈现为constant 当然 a method 您不能
  • 从 android 将用户注册到 QuickBlox 用户

    我正在尝试在我的 Android 应用程序中使用 QuickBlox 我阅读了指南并导入了示例 一切正常 我更改了一些用户可以使用 EditText 作为用户名和另一个密码登录的内容 并且效果很好 但现在我想添加一个注册按钮 使用户能够注册
  • JPA 多对多关系创建两个联接表

    我正在尝试在之间创建多对多关系User and FileObject假设用户可以访问许多文件对象的类 并且文件对象可以由许多用户和一对多关系访问 因为一个用户可以拥有许多文件 但一个文件只能由一个用户拥有 这是我的代码 Entity pub
  • Java:检查数组的相等性(顺序无关紧要)

    我有两个String数组 比方说 String s1 a b c String s2 c a b 这些数组应该相等 我想以 最干净 的方式检查它们的相等性 我尝试使用Arrays equals s1 s2 但我得到了一个错误的答案 我想这个
  • 用java.nio在内存中写入文件?

    使用 nio 可以映射内存中的现有文件 但是是否可以仅在内存中创建它而不在硬盘驱动器上创建文件 我想模仿 CreateFileMapping 窗口函数 它允许您在内存中写入 Java 中有等效的系统吗 目标是写入内存以便另一个程序 c 读取
  • 在 onClick 处理程序的活动类 [...] 中找不到方法 [...](View)

    当我按下按钮时fragment main xml 出现这个错误 java lang IllegalStateException Could not find a method sendMessage View in the activity
  • 在内存对象缓存中开发

    我正在开发一个基于网络的医疗应用程序 需要创建一个小型内存对象缓存 这是我的用例 我们需要显示需要某些东西 血液 肾脏等 的人提交的请求列表 并且它不会是一个巨大的列表 因为在某一天对血液或其他任何东西的请求将是有限的 请注意 我们不想使用
  • BufferedReader 跳过第二行

    从 CSV 读取数据时 它会每隔两行跳过一次 我有两个 CSV 文件 一个用于用户 一个用于属性 密钥 ID 是用户 String userName static String breakLine n n Method to create
  • CodenameOne 在构建后停止工作

    我对 codenameone 有一个奇怪的问题 我什至不确定出了什么问题 我尝试过 发送 Windows Phone 版本 并且从那时起我认为我没有更改任何其他内容 然而 在我这样做之后 模拟器无法启动并一直说我的导入是错误的 事实并非如此
  • 数组的浅拷贝,为什么不能简单地做newArr = oldArr?

    假设我有一个整数数组 orig 我想浅复制它 所以我不能这样做 int shallow orig 我的教授说 对于原语 浅复制和深复制本质上是相同的 因为我们必须复制数组的每个索引 但是将整个数组设置为等于另一个数组会起到同样的作用 对吧
  • 如何为 CompletableFuture::supplyAsync 选择执行器

    CompletableFuture supplyAsync gt IO bound queries 如何为 CompletableFuture supplyAsync 选择执行器以避免污染ForkJoinPool commonPool 里面
  • Android - 循环 strings.xml 文件

    我想知道是否有办法循环strings xml file 假设我有以下格式

随机推荐

  • C++:空类的对象的大小是多少?

    我想知道可能是什么空类对象的大小 肯定可以not为 0 字节 因为它应该可以像任何其他对象一样引用和指向它 但是 这样的物体有多大呢 我用了这个小程序 include
  • GNAT 编程套件 - 未找到源文件

    Ada 对我来说还是个新手 所以我正在尝试找到 GPS IDE 的方法 我之前问了另一个问题 但我认为这个问题优先于那个问题 并且可能是我麻烦的根源 当我编译时 我收到一长串 警告 源文件 未找到 在我的 gpr 文件中 我列出了所有规范和
  • 在 AngularJS 模型更改后更新 MathJax

    我正在尝试使用 AngularJS 双向绑定文本 其中包括 Latex 样式方程 我想调用 MathJax 来格式化方程 但我不确定确保 AngularJS 完成更改模型后调用 MathJax 的最佳方法 我想我需要回电 这是我的 Java
  • 如何在WAMP服务器中使用.htaccess?

    我在网上搜索了 2 天 我尝试在本地 wamp 中使用 htaccess 但我不能 我知道有问题 但不知道问题出在哪里 First 我激活了 重写模块 在 apache 菜单中 然后我检查了 phpinfo 页面 我看到该模块添加到了它的
  • NServiceBus 重试延迟

    配置 编码的最佳方式是什么N服务总线 http particular net nservicebus延迟重试消息 在其默认配置中 重试几乎立即发生 最多达到配置文件中定义的尝试次数 理想情况下 我想在一小时后重试 等等 另外 如何Handl
  • jQuery - 如何替换单击元素上的 img src?

    HTML div a href path to image1 jpg img src scripts timthumb php src path to image1 jpg w 200 h 20 alt Image name1 a div
  • 在 Bookdown 上指定 csl 后自定义或删除参考标题

    I specified a csl bibliography style as described by this method https stackoverflow com questions 50652853 how to speci
  • 正则表达式匹配 Java 中的未转义逗号

    问题描述 我试图使用 String 类提供的 split 方法将 a 拆分为单独的字符串 文档告诉我 它将围绕参数的匹配进行拆分 参数是正则表达式 我使用的分隔符是逗号 但逗号也可以转义 我使用的转义字符是正斜杠 只是为了让事情变得更容易
  • 有没有办法可以保留子线程的上下文局部变量?

    目前 我创建了一个库来记录后端调用 例如对boto3 and requests库 然后根据一些数据 例如响应的状态代码等 填充全局 数据 对象 我原来有data对象作为全局的 但后来我意识到这是一个坏主意 因为当应用程序并行运行时 data
  • Docker Compose 环境文件不同但 yml 相同?

    我发现我有多个环境 例如测试和生产 但我希望启动的 Docker 容器在这两个环境中是相同的 这很常见 唯一的区别是我想使用指定的应用程序配置env file 由于我有多个容器以及它们之间的依赖关系 所以我想使用docker 撰写 http
  • 通过创建 un-eval-uatable(“不可解析的 cruft”)JSON 来提高安全性?

    我们正在考虑对 json 使用不可解析的 curft 方法作为额外的安全级别 在查看这些方法时 我遇到了谷歌的while 1 和脸书的for 然后又提到 我看过有关以下内容的评论while 1 也就是说 1 是数字可能会被破坏 所以我的方法
  • Keras Lambda 层何时生成随机数?

    我想将简单的数据增强 输入向量乘以随机标量 应用于 Keras 中实现的完全连接的神经网络 Keras 具有很好的图像增强功能 但尝试使用它对于我的输入 1 张量 来说似乎很尴尬且缓慢 其训练数据集适合我的计算机内存 相反 我想象我可以使用
  • 无法将 Tomcat 作为 Windows 服务启动

    我在Windows 8上使用Tomcat6 我可以通过startup bat启动Tomcat 不会出现错误 我已将 Tomcat6 exe Tomcat6w exe 和 service bat 复制到 tomcat bin 目录下 并将 e
  • 人们使用什么 javascript 模拟框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在使用 Jasmine 来测试客户端和服务器端 javascript 并且需要进行一些模拟 有人对一个好的 javascript 模拟框架有
  • Get-WMIObject 返回错误且没有描述

    在我们的一台生产服务器上 我在运行脚本时开始出现错误 剥离代码后 我在从 PowerShell 提示符运行此命令时收到错误 Get WmiObject Class win32 volume 结果是这样的 Get WmiObject At l
  • 使用 PHP 连接到 MSSQL Server 2008

    我们在 Windows Server 2008 R2 上使用 MS SQL Server 2008 并已安装Apache 2 2 19 and PHP 5 2 17 分别地 我们已经安装了 PHP 的 MSSQL 模块并使用以下连接字符串
  • AngularJS ng-options 创建范围

    我正在尝试创建一个选择元素 其中包含数字 1 到页面的列表 其中页面是一个变量 即我拥有的页面数 我不知道该怎么做是构造 ng options 表达式 以便它能给我我需要的数字 这是我到目前为止所拥有的
  • 如何使用 Perl 获得两个时间戳的差异?

    在这里我基于一个问题 我有两个格式相同的时间戳 例如 2010年12月14日星期二18 23 19 2010年12月14日星期二17 23 19 我怎样才能得到两个时间戳的小时数之差 请帮我 use Date Parse my t1 Tue
  • Qt 如何通过QPrinter打印信息?

    我创建了新的 Qt C 项目 我想使用打印机在一张 A4 纸上打印一些消息 我整天都在阅读文档 但我不知道如何做到这一点 我理解了大部分内容 仅在文档中 但问题是 我实际上不知道应该使用所有打印机库中的哪一个 PrinterDialog q
  • 线程运行如何启动?

    我正在寻找一个关于线程的小例子 为了创建线程 我们可以通过两种方式来实现 Runnable接口或通过扩展Thread 我使用第一种方式 package test public class test implements Runnable p