当前位置: 首页 > 面试题库 >

线程连接本身

裘嘉树
2023-03-14
问题内容

我怀疑,当线程加入自身时会发生什么。即线程自行调用join方法。我没有任何错误。

样品:

public class JoinItself extends Thread {

    public void run() {
        System.out.println("Inside the run method ");
        System.out.println(Thread.currentThread().isAlive());
        for(int i=0;i<5;i++) {
            try {
                System.out.println("Joining itself ...");
                Thread.currentThread().join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {

        JoinItself j = new JoinItself();

        System.out.println(j.isAlive());
        j.start();
        System.out.println(j.isAlive());
        System.out.println("Thread started ...");

    }

}

但为什么?我应该得到任何错误吗?


问题答案:

线程连接本身的概念没有意义。

碰巧该join()方法使用该isAlive()方法确定何时从该join()方法返回。在当前的实现中,它也不检查线程是否在联接自己。
换句话说,该join()方法仅在线程不再活动时才返回。这将具有永远等待的效果。



 类似资料:
  • 我在C++中开发了一个状态设计模式,其中我有多个状态。某些状态的线程例程由限定。现在有这样的情况:一个状态转换到另一个状态,因此需要停止线程,并且需要通过清理内存。 因此,总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点呢? 或者有没有一种方法,当线程例程完成时,内存清理会自动发生? PS:问题是,当我从线程例程进行状态转换到另一个状态时,会调用当前状态析构函数。在当前状态的析构函数中

  • 我已经做了所有的尝试,但都不起作用,这是我的问题,我试图将一些文件从一台机器发送到另一台机器,想法是在目标机器上创建一个servlet,在服务器上运行它,并等待任何客户机连接,客户机和servlet代码在lan网络类型中完美地工作,但当涉及到wan网络类型时,我得到了这个例外 线程“main”org.apache.http.conn.HTTPhostConnectException:连接到192.

  • 连接线是Gio地球数据可视化的重要部分,两个国家之间的数据会通过数据线以流动的方式按照一定的方向移动。对于 被选中的国家 ,表示流入数据的线条称为"输入线",表示流出数据的线条称为"输出线"。 "输入线"的默认颜色是0x154492,"输出线"的默认颜色是0xdd380c。 可以通过 configure API来设置连接线的颜色,具体设置方法如下所示: controller.configure({

  • 给stackoverflow社区的人们。我正在寻找一些帮助,以解决HikariCP连接池面临的问题。 高级:我正在尝试使用线程池创建多个线程,我的计划是为每个工作线程提供独立于HikariCP的连接,但HikariCP所做的是在多个线程之间共享一个公共连接。我正在使用 以检索DB连接。现在,当我关闭一个连接时,我在其他线程中看到问题,说连接关闭了,线程正在处理的批次记录被丢弃。 以下是我的日志文件

  • 我不确定的是,在这种情况下,会创建多少个线程?我在一台2核心的机器上运行,所以每核心24个线程,最多48个线程? 当并行度因子设置为4.0时,可以并行运行的线程数将是8。那么,设置最小值和最大值(我的例子是24和48)的需要是什么?