Java 线程如何在ints自身实例类中共享变量

Java 线程如何在ints自身实例类中共享变量,java,multithreading,Java,Multithreading,我不知道该给这个问题起什么标题。基本上,我的问题是ints自身实例类中线程如何共享变量:例如,请检查以下代码: public class MainJava { public static void main(String[] args) throws InterruptedException { MyThread obje1=new MyThread(25); MyThread obje2=new MyThread(50); Thread

我不知道该给这个问题起什么标题。基本上,我的问题是ints自身实例类中线程如何共享变量:例如,请检查以下代码:

public class MainJava {
    public static void main(String[] args) throws InterruptedException {
        MyThread obje1=new MyThread(25);
        MyThread obje2=new MyThread(50);
        Thread t1=new Thread(obje1);
        t1.setName("Thread"+25);
        t1.start();
        Thread.sleep(2000);
        Thread t2=new Thread(obje2);
        t2.setName("Thread"+50);
        t2.start();
    }
}

class MyThread implements Runnable {
    int i;
    String threadName;

    public MyThread(int i) {
        this.i = i;  
    }

    @Override
    public void run() {
        if (Thread.currentThread().getName().equals("Thread25")) {
            try {
                Thread.sleep(50000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }           
        }
        System.out.println(i +" FOR THREAD : "+Thread.currentThread().getName());
    }

}
在这个线程中,我的假设是Thread50将把i的值改写为50,随后Thread25将把i的值读取为50。因为i是实例变量,它将在两个线程之间共享。但线程的输出是50:Thread50 25螺纹:螺纹25
所以我对这件事感到困惑。有人能帮我理解这一点吗。提前感谢

MyThread obje1=新的MyThread(25);MyThread obje2=新的MyThread(50);如果是两个单独的实例,您要做的是创建两个线程,分别独立地执行run方法。所以没有什么可分享的

本例中的不同之处在于,您创建的两个线程类使用的是同一个MyThread实例。在这种情况下,是的,第二个线程将更改另一个线程的值。“实例变量”意味着类的每个实例都有自己的变量副本。如果希望类†的所有实例共享一个变量,则将该变量声明为
静态



†有朝一日,您将了解为什么
静态
变量是软件设计的一种糟糕方法,但不是今天。

使用
静态int i
?了解
静态
。它是
class
级别而不是实例级别。
i
与类的单个实例相关,所以
Thread50
Thread25
都有自己的副本,不受其他副本的影响…@CycDemo我为什么要使用static int。我不想在线程之间共享它。@MadProgrammer发布问题后,我意识到了这一点,因为两个线程是分开的线程对象。但是假设我将userdefinedclassobjectobje替换为int i。然后我需要处理分享的问题,对吗?检查这里