私は2つのクラスを持っています。クラスTest
とクラスApplication
。クラスimplements Runnable
をテストし、スレッドです..もちろん。
どちらのクラスにも public static void main があります。
初め:
Test
まず、クラスレベル変数「a」があるクラスを起動します
public static String a = "abc";
これは文字列オブジェクトを指しており、スレッドの内部では、新しい値を割り当ててその値を出力しているだけです。
第二に:
Application
メインメソッドもあるクラスを起動し、Static String
クラス内を印刷したところTest
、驚くべきことに「abc」が印刷されました。クラスの開始後に2番目のクラスを開始したことに注意してくださいTest
。理想的にはNULL
、すべてのプロセスが実行され、1 つのプロセスが他のプロセスにアクセスしてはならない Java Sandbox のために、それを出力する必要があります。
今私の質問はなぜですか?新しく割り当てられた文字列を出力してはならない理由。以下の両方のクラスを提供しています
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author AZ
*/
public class Test implements Runnable {
public static String a = "abc";
@Override
public void run(){
while(true){
System.out.println(a);
a = new Date().toString();
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
class ThreadRunner {
static public void main(String args[]){
new Thread(new Test()).start();
}
}
セカンドクラス
import com.springhibernate.beans.MessageBean;
import com.springhibernate.beans.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author AZ
*/
public class Application {
public static void main(String args[]){
System.out.println("Test of printing String " + Test.a);
}
}