Class Mythreadimplements runnable{
private int ticket = 6;
@Override
public void Run () {
for (int i = 0;i < 10;i++) {
synchronized (this) {// Sync code block
if (this.ticket>0) {
try{
Thread.Sleep (1000); Thread Hibernation
}catch (Interruptedexception e) {
E.printstacktrace ();
}
System.out.println (Thread.CurrentThread (). GetName ()
+" Sell tickets, ticket = "+this.ticket--");
}
}
}
}
}
Public Classtestdemo {
public static void Main (string[] args) {
MyThread MT = new MyThread ();
new Thread (MT, " thread A"). Start ();// thread naming
new Thread (MT, " thread B"). Start ();
new Thread (MT, " thread C"). Start ();
new Thread (MT, " thread D"). Start ();
new Thread (MT, " thread E"). Start ();
}
}
Synchronization method:
Class Mythread2implements runnable{ private int ticket = 6; @Override public void Run () { for (int i = 0;i < 10;i++) { This.sale (); } } Public synchronized void Sale () { if (This.ticket > 0) { try { Thread.Sleep (100); } catch (Interruptedexception e) { E.printstacktrace (); } System.out.println (Thread.CurrentThread (). GetName () + " sell ticket,ticket =" +this. Ticket); ticket--; } } } Public ClassTestDemo2 { public static void Main (string[] args) { MyThread2 MT = newMyThread2 (); New Thread (MT, " scalper A"). Start (); New Thread (MT, " scalper B"). Start (); New Thread (MT, " scalper C"). Start (); New Thread (MT, " scalper D"). Start (); New Thread (MT, " scalper E"). Start (); } } |
Multi-thread synchronization code block