思路:跟一个线程打印1~52,另一个线程打印A~Z一样,也是synchornized+wait,notify方法;难点在于主线程的启动不需要start方法,因为程序的入口是main方法,在执行这个程序的时候,主线程已经启动了;
public class Solution1006 {
public static void main(String[] args) {
MyObject my = new MyObject();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<5; i++)
my.printSub();
}
}).start();
for(int i=0; i<5; i++)
my.printMain();
}
}
public class MyObject {
private static boolean flag = false;
public synchronized void printSub(){
while(flag == true){
try {
this.wait();
}catch (Exception e){
e.printStackTrace();
}
}
for(int i=0; i<10; i++)
System.out.print("s");
System.out.println();
flag = true;
this.notifyAll();
}
public synchronized void printMain(){
while(flag == false){
try {
this.wait();
}catch (Exception e){
e.printStackTrace();
}
}
for(int i=0; i<100; i++)
System.out.print("m");
System.out.println();
flag = false;
this.notifyAll();
}
}
结果:
ssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
ssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
ssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
ssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
ssssssssss
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
Process finished with exit code 0
本文介绍了一个使用Java实现的线程同步案例,通过一个对象在两个线程间切换打印字符和字符串,展示了如何使用synchronized关键字,wait和notify方法来控制线程的执行顺序,确保了线程间的正确交互。
842

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



