Rumah > Soal Jawab > teks badan
public static void main(Sting args[]){
Object a=null;
new Thread(){
a=new xxx()
}.start();
new Thread(){
a=new xxx()
}.start();
}
Saya ingin bertanya, terdapat logik permulaan objek yang kompleks dalam kaedah xxx() Adakah objek dicipta oleh kata kunci baharu atom? Jika tidak, adakah terdapat masalah gangguan pemulaan objek?
扔个三星炸死你2017-06-23 09:16:17
Saya tidak faham apa yang anda maksudkan, jika tekaan saya betul:
Semuanya bergantung pada logik khusus dalam kaedah pembinaan anda Lagipun, kod itu ditulis oleh manusia.
public class Test {
static class A{
public A(){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:hh:mm:ss:SS");
System.out.println(sdf.format(new Date()) + "--begin --从线程" + Thread.currentThread().getName() + "中创建A");
Thread.sleep(2000);
System.out.println(sdf.format(new Date()) + "--end--从线程" + Thread.currentThread().getName() + "中创建A");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("A is " +new A());
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("A is " +new A());
}
}).start();
}
}
Output:
2017-06-16:11:46:43:780--begin --从线程Thread-1中创建A
2017-06-16:11:46:43:780--begin --从线程Thread-0中创建A
2017-06-16:11:46:45:786--end--从线程Thread-0中创建A
2017-06-16:11:46:45:786--end--从线程Thread-1中创建A
A is nwe.Test$A@1e6a629c
A is nwe.Test$A@27fcb25d
Contoh lain, pembina mengandungi blok penyegerakan, dan setiap utas perlu menunggu pelaksanaan urutan sebelumnya selesai sebelum ia boleh dilaksanakan.
import java.text.*;
import java.util.Date;
public class Test {
static class A{
public A(){
try {
synchronized (Test.class) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:hh:mm:ss:SS");
System.out.println(sdf.format(new Date()) + "--begin --从线程" + Thread.currentThread().getName() + "中创建A");
Thread.sleep(2000);
System.out.println(sdf.format(new Date()) + "--end--从线程" + Thread.currentThread().getName() + "中创建A");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("A is " +new A());
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("A is " +new A());
}
}).start();
}
}
Output:
2017-06-16:11:49:33:548--begin --从线程Thread-0中创建A
2017-06-16:11:49:35:549--end--从线程Thread-0中创建A
A is nwe.Test$A@717c3e10
2017-06-16:11:49:35:550--begin --从线程Thread-1中创建A
2017-06-16:11:49:37:553--end--从线程Thread-1中创建A
A is nwe.Test$A@27280786
扔个三星炸死你2017-06-23 09:16:17
Tidak, sebagai contoh, jika beberapa keping logik ditulis dalam kaedah pembinaan, ia boleh terganggu apabila kaedah pembinaan dilaksanakan.
PHP中文网2017-06-23 09:16:17
Penerangan tentang "atomicity" adalah terlalu abstrak Apabila poster bertanyakan soalan, sebaiknya jangan berfikir bahawa setiap orang mempunyai pemahaman yang sama tentang sesuatu perkataan. Apa yang boleh saya katakan ialah pembina adalah selamat untuk setiap objek, pembina hanya akan dilaksanakan sekali dan oleh satu utas.