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,