class Mythread extends Thread {
private int ticket = 5;
@Override
public void run() {
for(int i =0 ; i<10 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// Bloc catch généré automatiquement par TODO e.printStackTrace(); } if(ticket > 0 ) { ticket--; L.d ("Le nombre de billets restants est" + ticket + ""); } } } }
public class ThreadSample {
public static void main(String[] args) {
Mythread mythread = new Mythread();
L.d ("Début de la vente des billets"); mythread.start(); } }
résultat: ThreadSample # main: 34 nom du thread: id du thread principal: 1 gentest :: Ticket sales start Mythread # run: 24 nom du thread: Thread-0 id du thread: 11 gentest :: 4 tickets restants Mythread # run: 24 nom du thread: Thread-0 id du thread: 11 gentest :: 3 tickets restants Mythread # run: 24 nom du thread: Thread-0 id du thread: 11 gentest :: 2 tickets restants Mythread # run: 24 nom du thread: Thread-0 id du thread: 11 gentest :: 1 ticket restant Mythread # run: 24 nom du fil: Thread-0 id du fil: 11 gentest :: 0 billets restants
interface MyTaskResult {
void ticketSoldout();
void ticketRemain();
}
class Mythread extends Thread {
private MyTaskResult myTaskResult;
public Mythread (MyTaskResult myTaskResult) {
this.myTaskResult = myTaskResult;
}
private int ticket = 5;
@Override
public void run() {
for(int i =0 ; i<10 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// Bloc catch généré automatiquement par TODO e.printStackTrace(); } if(ticket > 0 ) { ticket--; L.d ("Le nombre de billets restants est" + ticket + ""); } } if(ticket>0) { myTaskResult.ticketRemain(); }else { myTaskResult.ticketSoldout(); } } }
public class ThreadSample {
public static void main(String[] args) {
Mythread mythread = new Mythread(myTaskResult);
L.d ("Début de la vente des billets"); mythread.start(); } static MyTaskResult myTaskResult = new MyTaskResult() {
@Override
public void ticketSoldout() {
L.d ("Merci pour votre travail acharné."); }
@Override
public void ticketRemain() {
L.d ("N'est-ce pas fini?"); } }; }
Le résultat est
ThreadSample # main: 43 nom du thread: id du thread principal: 1 gentest :: Ticket sales start Mythread # run: 28 nom du thread: Thread-0 id du thread: 11 gentest :: 4 tickets restants Mythread # run: 28 nom du fil: Thread-0 id du fil: 11 gentest :: 3 tickets restants Mythread # run: 28 nom du fil: Thread-0 id du fil: 11 gentest :: 2 tickets restants Mythread # run: 28 nom du fil: Thread-0 id du fil: 11 gentest :: 1 ticket restant Mythread # run: 28 nom du fil: Thread-0 id du fil: 11 gentest :: 0 billets restants ThreadSample $ 1 # ticketSoldout: 50 nom du fil: Thread-0 id du fil: 11 gentest :: Merci.
interface MyTaskResult {
void ticketSoldout(String threadName);
void ticketRemain(String threadName);
}
class TicketBox implements Runnable {
private int ticket = 5;
@Override
public void run() {
for(int i =0 ; i<10 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// Bloc catch généré automatiquement par TODO e.printStackTrace(); } if(ticket > 0 ) { ticket--; L.d ("Le nombre de billets restants est" + ticket + ""); } } L.d ("Ticket complété:" + ticket); } }
class Mythread extends Thread {
private MyTaskResult myTaskResult;
public Mythread (Runnable r, MyTaskResult myTaskResult,String threadName) {
super(r);
this.myTaskResult = myTaskResult;
setName(threadName);
}
private int ticket = 5;
@Override
public void run() {
super.run();
}
}
public class ThreadSample {
public static void main(String[] args) {
TicketBox ticketBox = new TicketBox();
Mythread mythread1 = nouveau Mythread (ticketBox, myTaskResult, "proxy 1"); Mythread mythread2 = nouveau Mythread (ticketBox, myTaskResult, "proxy 2"); Mythread mythread3 = nouveau Mythread (ticketBox, myTaskResult, "proxy 3"); L.d ("Début de la vente des billets"); mythread1.start(); mythread2.start(); mythread3.start(); } static MyTaskResult myTaskResult = new MyTaskResult() {
@Override
public void ticketSoldout(String threadName) {
L.d ("Merci pour votre travail acharné." + ThreadName); }
@Override
public void ticketRemain(String threadName) {
L.d ("N'est-ce pas fini?" + ThreadName); } }; }
résultat
ThreadSample # main: 52 nom du thread: id du thread principal: 1 gentest :: Ticket sales start TicketBox # run: 23 nom du thread: proxy 2 id du thread: 12 gentest :: 3 tickets restants TicketBox # run: 23 nom du fil: proxy 1 id du fil: 11 gentest :: 3 tickets restants TicketBox # run: 23 nom du thread: proxy 3 id du thread: 13 gentest :: 3 tickets restants TicketBox # run: 23 nom du thread: proxy 1 id du thread: 11 gentest :: 2 tickets restants TicketBox # run: 23 nom du thread: proxy 2 id du thread: 12 gentest :: 1 ticket restant TicketBox # run: 23 nom du thread: proxy 3 id du thread: 13 gentest :: 0 tickets restants TicketBox # run: 26 nom du thread: Proxy 2 id du thread: 12 gentest :: Tickets restants terminés: 0 TicketBox # run: 26 nom du thread: Proxy 3 id du thread: 13 gentest :: Tickets restants terminés: 0 TicketBox # run: 26 nom du thread: Proxy 1 id du thread: 11 gentest :: Tickets restants terminés: 0
problème:
class TicketBox implements Runnable {
private int ticket = 5;
@Override
public void run() {
for(int i =0 ; i<10 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// Bloc catch généré automatiquement par TODO e.printStackTrace(); } saleTicket(); } L.d ("Ticket restant terminé:" + ticket); } private synchronized void saleTicket() { if(ticket > 0 ) { ticket--; L.d ("Le nombre de billets restants est" + ticket + ""); } } }
résultat
ThreadSample # main: 55 nom du thread: id du thread principal: 1 gentest :: Ticket sales start TicketBox # saleTicket: 28 nom de fil: Proxy 2 ID de fil: 12 gentest :: 4 billets restants TicketBox # saleTicket: 28 nom de fil: Proxy 3 ID de fil: 13 gentest :: 3 billets restants TicketBox # saleTicket: 28 nom de fil: Proxy 1 ID de fil: 11 gentest :: 2 billets restants TicketBox # saleTicket: 28 nom de fil: Proxy 2 ID de fil: 12 gentest :: 1 ticket restant TicketBox # saleTicket: 28 nom de fil: Proxy 1 ID de fil: 11 gentest :: 0 billets restants TicketBox # run: 23 nom du fil: Proxy 2 id du fil: 12 gentest :: Tickets restants terminés: 0 TicketBox # run: 23 nom du fil: Proxy 3 id du fil: 13 gentest :: Tickets restants terminés: 0 TicketBox # run: 23 nom du fil: Proxy 1 id du fil: 11 gentest :: Tickets restants terminés: 0
Veuillez vous référer à github
résultat
ThreadSample # main: 85 nom du thread: id du thread principal: 1 gentest :: Ticket sales start TicketBox # saleTicket: 52 nom de fil: Proxy 2 ID de fil: 12 gentest :: 4 billets restants TicketBox # saleTicket: 52 nom de fil: Proxy 1 ID de fil: 11 gentest :: 3 billets restants TicketBox # saleTicket: 52 nom de fil: Proxy 3 ID de fil: 13 gentest :: 2 billets restants TicketBox # saleTicket: 52 nom de fil: Proxy 1 ID de fil: 11 gentest :: 1 ticket restant TicketBox # saleTicket: 52 nom de fil: Proxy 2 ID de fil: 12 gentest :: 0 billets restants ThreadSample $ 1 # taskDone: 95 nom de thread: Proxy 1 id de thread: 11 gentest :: Merci. Adjoint 1 ThreadSample $ 1 # taskDone: 95 nom de thread: Proxy 2 ID de thread: 12 gentest :: Merci. Substitut 2 ThreadSample $ 1 # taskDone: 95 nom de thread: Proxy 3 ID de thread: 13 gentest :: Merci pour votre travail. Adjoint 3 ThreadSample $ 1 # taskDone: 100 nom de thread: Proxy 3 id de thread: 13 gentest :: ---------------- Tous les rapports terminés ------------- --------------- ThreadSample $ 2 # sendResult: 108 nom de thread: Proxy 3 ID de thread: 13 gentest :: Nombre total de tickets: 5 ThreadSample $ 2 # sendResult: 109 nom de thread: Proxy 3 ID de thread: 13 gentest :: Tickets restants: 0 ThreadSample $ 2 # sendResult: 110 nom de thread: Proxy 3 ID de thread: 13 gentest :: Proxy 1 Résultat des ventes: 2 ThreadSample $ 2 # sendResult: 111 nom de thread: Proxy 3 ID de thread: 13 gentest :: Proxy 2 Résultat des ventes: 2 ThreadSample $ 2 # sendResult: 112 nom de thread: Proxy 3 ID de thread: 13 gentest :: Proxy 3 Sales Résultat: 1
Recommended Posts