已知有一个球,球编号为A,3个线程同时去取该球,打印拿到该球的线程名称
1.编写球类
2.编写线程类
3.给线程命名
4打印拿到该球的线程名称
public class TestThread {
private static String status = "A";
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
int count=10;
for(int i=0;i<count;){
synchronized (status) {
if(status.equals("A")){
System.out.print("A");
status="B";
i++;
}
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
int count=10;
for(int i=0;i<count;){
synchronized (status) {
if(status.equals("B")){
System.out.print("B");
status="C";
i++;
}
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
int count=10;
for(int i=0;i<count;){
synchronized (status) {
if(status.equals("C")){
System.out.print("C");
status="A";
i++;
}
}
}
}
}).start();
}
哪个取到球哪个就把回调方法使用就是了
几个问题:
1.用java?
2.球类有哪些字段?
3.如果是3个线程同时去取这个球,那这个球需不需要加锁,如果加锁那就是只有一个线程取到(哪个先抢到cpu时间哪个取),如果不加锁很有可能出现多个线程取到球
在球类中写一个方法①,方法直接调用 Thread.currentThread().getName()就能获取当前线程的名字了(哪个线程调用方法①就获取那个线程名字),最后在run()方法中调用方法①即可(你想线程一起干活就不加锁,想一个一个干活就加锁)