Có phải màn hình trong java không giới hạn truy cập vào các biến mẫu và chỉ với các phương thức được khai báo đồng bộ hoặc mã trong các câu lệnh được đồng bộ hóa không?Màn hình java có bao gồm các biến mẫu không?
Tôi đã tạo hai luồng, thread y
gọi phương thức đồng bộ hóa, được khai báo đồng bộ trong khi thread r
gọi phương thức không đồng bộ không được khai báo đồng bộ. Cả hai phương thức gọi trên đối tượng được chia sẻ s
.
Thread r
có thể sửa đổi biến mẫu của đối tượng s
trong khi màn hình hoặc khóa đối tượng đó vẫn đang được giữ bởi thread y
.
Có phải màn hình trong Java không hạn chế quyền truy cập vào các biến mẫu và chỉ cho các phương thức được khai báo đồng bộ hoặc mã trong các câu lệnh được đồng bộ hóa không?
public class stuff {
private int a = 10;
public synchronized void sync() {
long t1 = System.currentTimeMillis();
System.out
.println("Okay, I am in sync method. I will be waiting for 10 seconds. Current Time = "
+ System.currentTimeMillis());
while (System.currentTimeMillis() - t1 < 10000);
System.out
.println("Okay, I have waited for 10 seconds. Current time is "
+ System.currentTimeMillis()
+ ".Now I will exit from sync method, a= " + this.a);
}
public void unsync() {
System.out
.println("Alright, I am in unsync method the currrent time is "
+ System.currentTimeMillis());
this.a = this.a + 1;
System.out.println("The time of exit from unsync method is "
+ System.currentTimeMillis());
}
}
class t1 extends Thread {
stuff s;
public t1(stuff s) {
this.s = s;
}
public void run() {
s.sync();
}
}
class t2 extends Thread {
stuff s;
public t2(stuff s) {
this.s = s;
}
public void run() {
s.unsync();
}
}
class m {
public static void main(String args[]) throws Exception {
stuff s = new stuff();
t1 y = new t1(s);
t2 r = new t2(s);
y.start();
Thread.sleep(2000);
r.start();
}
}
Đầu ra của chương trình là dưới đây:
Okay, I am in sync method. I will be waiting for 10 seconds. Current Time = 1358801766310 Alright, I am in unsync method the currrent time is 1358801768343 The time of exit from unsync method is 1358801768343 Okay, I have waited for 10 seconds. Current time is 1358801776310.Now I will exit from sync method, a= 11