核心代码
package xiancheng;
public class Food {
String name;
String desc;
void set(String name, String desc) {
this.name = name;
this.desc = desc;
}
void get() {
System.out.println(this.name + "---->" + this.desc);
}
}
package xiancheng;
public class ThreadDemo2 {
public static void main(String[] args) {
MyRunnable3 myRunnable3 = new MyRunnable3();
Thread thread = new Thread(myRunnable3);
Thread thread1 = new Thread(myRunnable3);
thread.start();
thread1.start();
}
}
class MyThread1 extends Thread {
@Override
public void run() {
super.run();
for (var i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "------------" + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable2 implements Runnable {
@Override
public void run() {
for (var i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable3 implements Runnable {
private int tacket = 10;
private Object obj = new Object();
@Override
public void run() {
for (var i = 0; i < 300; i++) {
synchronized (this) {
if (tacket > 0) {
--tacket;
System.out.println("买票成功,剩余" + tacket + "张");
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
package xiancheng;
public class ThreadDemo4 {
public static void main(String[] args) {
Food food = new Food();
Runnable runnable = () -> {
for (int i = 0; i < 20; i++) {
if(i % 2 == 0) {
food.set("佛挑梁", "大补");
} else {
food.set("馒头", "管饱");
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable run2 = () -> {
for (int i = 0; i < 20; i++) {
food.get();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread thread = new Thread(runnable);
Thread thread1 = new Thread(run2);
thread.start();
thread1.start();
}
}
package xiancheng;
public class XianchengTest {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
class MyThread extends Thread {
@Override
public void run() {
super.run();
for (var i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
for (var i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}