/* Colocando veSaldo e deposita como Syncronized, garanto que enquanto veSaldo executa, nem vSaldo nem deposita excutará e mesma coisa para deposita. Colocando Syncronized só em deposita, veSaldo executa enquanto deposita está trabalhando, deposita espera. */ public class ThreadsEnxeridas { public static void main(String[] args) { int repet = 5; Conta cc = new Conta(0); (new ThreadEnxerida(" 1", cc, repet)).start(); try {Thread.sleep(100);}catch( InterruptedException exception) { System.err.println(exception); } (new ThreadEnxerida(" 2", cc, repet)).start(); try {Thread.sleep(100);}catch( InterruptedException exception) { System.err.println(exception); } (new ThreadEnxerida(" 3", cc, repet)).start(); try {Thread.sleep(100);}catch( InterruptedException exception) { System.err.println(exception); } (new ThreadEnxerida(" 4", cc, repet)).start(); } } class ThreadEnxerida extends Thread { private int vezes; private Conta cc; public ThreadEnxerida( String id, Conta a, int qtas) { super(id); cc = a; vezes = qtas; } public void run() { for (int i= 0; i< vezes; i++) { System.out.println("thread" + getName() + "- saldo: " + cc.veSaldo()); try {Thread.sleep(100);}catch( InterruptedException exception) { System.err.println(exception); } cc.deposita(100); } } } //Exemplo: acesso a saldo Exemplo: acesso a saldo bancário class Conta { private int saldo; public Conta (int ini) { saldo = ini; } public /* synchronized */ int veSaldo() { return saldo; } public /* synchronized */ void deposita(int dep) { for (int i=0; i