cari

Rumah  >  Soal Jawab  >  teks badan

jvm - Adakah objek baharu Java atom?

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?

滿天的星座滿天的星座2712 hari yang lalu1264

membalas semua(4)saya akan balas

  • 扔个三星炸死你

    扔个三星炸死你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
    

    balas
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-23 09:16:17

    Adalah disyorkan untuk merujuk kepada mod singleton selamat benang

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-23 09:16:17

    Tidak, sebagai contoh, jika beberapa keping logik ditulis dalam kaedah pembinaan, ia boleh terganggu apabila kaedah pembinaan dilaksanakan.

    balas
    0
  • PHP中文网

    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.

    balas
    0
  • Batalbalas