1. 两个线程轮流打印数字,一直到100
public class Demo1 extends Thread {
static Object o = new Object();
static int cout=100;
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
synchronized (o) {
if (cout > 0) {
System.out.println("cout = " + cout);
cout--;
} else {
System.exit(0);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Demo1 d = new Demo1();
d.start();
Demo1 d1 = new Demo1();
d1.start();
}
}
运行结果
2. 三个窗口同时卖票 用 实现Runnable方式
public class Demo2 implements Runnable{
static int num= 30;//30张票
static Object o=new Object();
//实现接口Runnable重写run方法
@Override
public void run() {
//循环卖票
while (true){
try {
//休眠3秒执行一次 == 3000毫秒
Thread.sleep(3000);
//多线程加同步锁 容易并发
synchronized (o){
//当票数大于0执行卖票
if (num>0){
System.out.println("当前卖的票号为:"+num)
num--;
}else {
System.out.println("此票已售完");
System.exit(0);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//new当前类 启动线程
Demo2 d1 = new Demo2();
Thread t1= new Thread(d1);
t1.start();
Demo2 d2 = new Demo2();
Thread t2 = new Thread(d2);
t2.start();
Demo2 d3 = new Demo2();
Thread t3 = new Thread(d3);
t3.start();
}
}
运行结果

这篇博客展示了两个Java多线程编程的实例。第一个例子是两个线程轮流打印数字,直至达到100,通过`synchronized`关键字确保线程安全。第二个例子涉及三个线程同时卖票,使用相同的方法防止并发问题,直至票数售罄。这两个示例都强调了在多线程环境中如何正确地同步操作以避免数据竞争。

被折叠的 条评论
为什么被折叠?



