优化这段代码import java.util.Random; public class MyRun04 implements Runnable { public static String[] arr = new String[3]; public MyRun04() { Random r = new Random(); double a= r.nextInt(1,9999)/100; double b=r.nextInt(1,9999-(int)(a*100))/100.0; double c=100-a-b; arr[0]=String.format("%.2f",a); arr[1]=String.format("%.2f",b); arr[2]=String.format("%.2f",c); } public static int count = 3; @Override public void run() { while (true) { synchronized (MyRun04.class) { if (count == 0) { System.out.println(Thread.currentThread().getName() + "没有抢到"); break; } else { count--; System.out.println(Thread.currentThread().getName() + "抢到了" + arr[count] + "元"); break; } } } } }
时间: 2024-02-14 15:15:14 浏览: 75
这段代码已经进行了比较好的优化,但还有一些可以改进的地方。
1. 静态变量count可以改为实例变量,这样更符合面向对象的设计思路。同时,在多线程环境下,需要使用volatile关键字来保证count变量的可见性和原子性。
2. 在run方法中,可以将synchronized关键字加到count变量的修改语句上,这样可以减少锁的范围,提高并发性能。
下面是优化后的代码:
```java
import java.util.Random;
public class MyRun04 implements Runnable {
private static final String[] arr = new String[3];
private volatile int count = 3;
public MyRun04() {
Random r = new Random();
double a = r.nextInt(1, 9999) / 100.0;
double b = r.nextInt(1, 9999 - (int) (a * 100)) / 100.0;
double c = 100 - a - b;
arr[0] = String.format("%.2f", a);
arr[1] = String.format("%.2f", b);
arr[2] = String.format("%.2f", c);
}
@Override
public void run() {
while (true) {
synchronized (this) {
if (count == 0) {
System.out.println(Thread.currentThread().getName() + "没有抢到");
break;
} else {
count--;
System.out.println(Thread.currentThread().getName() + "抢到了" + arr[count] + "元");
break;
}
}
}
}
}
```
优化后的代码中,count变量改为实例变量,并使用volatile关键字修饰,保证了count变量的可见性和原子性。在run方法中,将synchronized关键字加到count变量的修改语句上,减少了锁的范围,提高了并发性能。
阅读全文