同步代码块:
runabled 实现
package src.ThreadH.saleTicket;
/**
* @author Vince
* @create 2024-07-02-17:37
*/
public class Test1 {
public static void main(String[] args) {
Test2 test2 = new Test2();
Thread t1 = new Thread(test2);
Thread t2 = new Thread(test2);
Thread t3 = new Thread(test2);
t1.start();
t2.start();
t3.start();
// Test3 test3 = new Test3();
// Test3 test4 = new Test3();
// Test3 test5 = new Test3();
// test3.start();
// test4.start();
// test5.start();
}
}
class Test2 implements Runnable {
private int num = 100;
@Override
public void run() {
while (true) {
synchronized (this) {
if (num > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + " 卖出了第 " + num-- + " 张票");
} else {
System.out.println("票已售罄");
break;
}
}
}
}
}
extends
package src.ThreadH.saleTicket;
/**
* @author Vince
* @create 2024-07-03-09:28
*/
public class ExtendTest {
public static void main(String[] args) {
extendThread test1 = new extendThread();
extendThread test2 = new extendThread();
extendThread test3 = new extendThread();
test1.setName("thread 1");
test2.setName("thread 2");
test3.setName("thread 3");
test2.start();
test1.start();
test3.start();
}
}
class extendThread extends Thread {
static int num = 100;
@Override
public void run() {
while (true) {
synchronized (extendThread.class) {
// if (num > 0) {
// try {
// Thread.sleep(num/2);
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
// System.out.println("sale ticket sucess , " + "thread is" + Thread.currentThread().getName() + " the ticket index is " + num--);
// } else {
// System.out.println("ticket sale complete");
// break;
// }
if (num > 0) {
try {
Thread.sleep(7);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + " 卖出了第 " + num-- + " 张票");
} else {
System.out.println("票已售罄");
break;
}
}
}
}
}
同步方法
runable 实现
package src.ThreadH.saleTicket;
/**
* @author Vince
* @create 2024-07-03-10:08
*/
public class handleThread {
public static void main(String[] args) {
Test22 test2 = new Test22();
Thread t1 = new Thread(test2);
Thread t2 = new Thread(test2);
Thread t3 = new Thread(test2);
t2.start();
t1.start();
t3.start();
}
}
class Test22 implements Runnable {
private int num = 100;
private boolean flag = true;
@Override
public void run() {
while (flag) {
this.show();
}
}
synchronized void show() {
if (num > 0) {
try {
Thread.sleep(35);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + " 卖出了第 " + num-- + " 张票");
} else {
System.out.println("票已售罄");
this.flag = false;
}
}
}
extends
package src.ThreadH.saleTicket;
/**
* @author Vince
* @create 2024-07-03-10:16
*/
public class extendMethodThread {
public static void main(String[] args) {
extendThread2 test1 = new extendThread2();
extendThread2 test2 = new extendThread2();
extendThread2 test3 = new extendThread2();
test1.setName("thread 1");
test2.setName("thread 2");
test3.setName("thread 3");
test2.start();
test1.start();
test3.start();
}
}
class extendThread2 extends Thread {
static int num = 100;
static private boolean flag = true;
@Override
public void run() {
while (flag) {
this.show();
}
}
synchronized static void show() {
if (num > 0) {
try {
Thread.sleep(7);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName() + " 卖出了第 " + num-- + " 张票");
} else {
System.out.println("票已售罄");
flag = false;
}
}
}