java multithreading questões de segurança

Programa com a venda de bilhetes ou reserva de bilhetes identificar problemas repetir negativo

classe Ticket os implementos do Runnable {
     Privada  int o carrapato = 100 ; 
    @Override 
    pública  vazio run () {
         o tempo ( como true ) {
             IF (o carrapato> 0 ) {
                 try { 
                    o Thread.sleep ( 10); // multiplicidade de fios de espera e, em seguida, para obter o direito de execução 
                } a captura (InterruptedException E) { 
                } 

                System.out.println (Thread.currentThread () getName (). + "... Venda:" + tick-- ); 
            } 
        } 
    }
}
público  classe de demonstração {
     pública  estáticos  vazios principais (String [] args) { 
        Ticket t = new Ticket (); 
        Tópico t1 = new Thread (t); 
        Tópico t2 = new Thread (t); 
        t1.start (); 
        t2.start (); 
    } 
}

Quando várias declarações em operação os mesmos dados compartilhados, apenas um segmento para executar múltiplos comandos parte, não foi executada, outro segmento para executar os envolvidos, levando a partilha de dados errados.

Solução: compartilhar dados sobre muitos dos declaração operacional, apenas um fio executados, em execução, outros segmentos não podem participar na implementação.

solução de Java multi-thread-safe: sincronizado bloco

classe de ingressos implementos Runnable {
     private  int tick = 100 ; 
    @Override 
    pública  vazio run () {
         enquanto ( verdadeiro ) {
             sincronizado (Object. Class ) {
                 se (carrapato> 0 ) {
                     try { 
                        Thread.sleep ( 10 ); 
                    } Prendedor (InterruptedException e) { 
                    } 

                    System.out.println (Thread.currentThread () getName (). + "... venda:" + tick--); 
                } 
            } 
        } 
    } 
} 
Pública  classe de demonstração {
     pública  estáticos  vazios principais (String [] args) { 
        Ticket t = new Ticket (); 
        Tópico t1 = new Thread (t); 
        Tópico t2 = new Thread (t); 
        t1.start (); 
        t2.start (); 
    } 
}

Dentro objeto ( Object.class ) Se o bloqueio, thread que bloqueou podem ser realizados em sincronia,

No thread que bloqueou mesmo começar a cpu poder executivo, não pode entrar, porque não há nenhuma aquisição de bloqueio.

premissa Synchronous:

1 ou superior deve ter dois fios.

2. Vários segmentos devem usar o mesmo bloqueio.

Temos de garantir que a sincronização apenas um segmento em operação.

Benefícios: para resolver os problemas de multithreading de segurança.

Desvantagens: vários segmentos precisa determinar o bloqueio, mais consumo de recursos,

 

Acho que você gosta

Origin www.cnblogs.com/hongxiao2020/p/12588925.html
Recomendado
Clasificación