Java中主类的两个内联线程属于同一个对象?

Java中主类的两个内联线程属于同一个对象?,java,concurrency,Java,Concurrency,在下面的代码中,线程t1和t2属于同一个对象吗?如果有的话?哪个对象。他们会竞争获得监视器或互斥锁吗 如果它们属于不同的对象。怎样用监视器来解释是有用的 package com.java.thread.practice; public class InlineObject_SameThread { public static void main(String[] args) { Thread t1 = new Thread(new Runnable(){

在下面的代码中,线程t1和t2属于同一个对象吗?如果有的话?哪个对象。他们会竞争获得监视器或互斥锁吗

如果它们属于不同的对象。怎样用监视器来解释是有用的

package com.java.thread.practice;

public class InlineObject_SameThread {

    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable(){

            @Override
            public void run() {

            // Will this compete with thread t2 to acquire monitor ??   

            }

        });

        Thread t2 = new Thread(new Runnable(){

            @Override
            public void run() {

                // Will this compete with thread t1 to acquire monitor ??   

            }

        });

        // Starting the first thread.

        t1.start();

        // Starting the second thread.

        t2.start();

        /* There can be further logic, currently I will placing those as
         * we progress.
         */ 
    }

    /*
      Code ends.
    */

}
线程t1和t2是否属于同一个对象

线程不属于对象,对象也不属于其他对象。对象可以包含对其他对象的引用,包括表示线程的线程对象。由于有点迂腐,引用也不属于对象——它们只是值。任何对象都不能像拥有值1那样拥有引用。对象可能拥有存储引用的变量

他们会竞争获得监视器或互斥锁吗

尽管如此,线程不会无缘无故地获取对象的监视器。在您的示例中,两个线程都没有执行任何会导致其尝试获取任何对象的监视器的操作。当然,可以让这样的线程执行导致它们争用同一个监视器的工作,但这与您所称的内联几乎没有关系

如果它们属于不同的对象。怎样用监视器来解释是有用的

package com.java.thread.practice;

public class InlineObject_SameThread {

    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable(){

            @Override
            public void run() {

            // Will this compete with thread t2 to acquire monitor ??   

            }

        });

        Thread t2 = new Thread(new Runnable(){

            @Override
            public void run() {

                // Will this compete with thread t1 to acquire monitor ??   

            }

        });

        // Starting the first thread.

        t1.start();

        // Starting the second thread.

        t2.start();

        /* There can be further logic, currently I will placing those as
         * we progress.
         */ 
    }

    /*
      Code ends.
    */

}
每个线程对象表示一个线程,其存在与创建线程的上下文基本无关。但是,只有main引用了其中一个。没有监视器方面的解释,因为监视器根本不考虑因素


此外,在main中执行的代码不与任何对象关联,因为main是静态的。除了线程本身之外,线程不属于任何对象。这两个可运行实例是存在的,但是没有理由断言线程属于这些实例。如果有什么不同的话,您可能会认为这是另一种情况。

线程或对象通常不属于其他对象。其他对象可能会引用这些线程,但这不是所有权,就像知道我的电话号码的人会拥有我的电话一样。我从你的帖子中删除了我正在寻找讨论。StackOverflow显然不适合讨论。另外,请注意我所做的其他格式更改,并学习如何格式化您的帖子和代码。谢谢@AndyTurner。这是否意味着两个线程都引用同一个对象“thisInlineObject_SameThread”?我不知道你的确切意思;但是如果你在两个Runnables的主体中提到这一点,它们会指不同的Runnables。谢谢。这些信息很有用,可以消除疑虑。