62,614
社区成员
发帖
与我相关
我的任务
分享
class A implements Runnable{
private static int totalTicketNumber=100;//总票数
private String name;
public A(String name) {
this.name=name;
}
@Override
public void run() {
for (int j = 0; j < 5; j++) {
totalTicketNumber--;
System.out.println(totalTicketNumber);
}
}
public static void main(String[] args) throws InterruptedException {
String name="线程";
A a=new A(name);
for (int i = 1; i <= 5; i++) {
Thread t=new Thread(a);
t.start();
}
}
}
public class A implements Runnable{
private static AtomicInteger atomInteger = new AtomicInteger(0);//总票数
private static int total = 0;
private String name;
public A(String name) {
this.name=name;
}
public int decrement() {
return atomInteger.decrementAndGet();
}
@Override
public void run() {
for (int j = 0; j < 5; j++) {
decrement();
total -- ;
}
}
public static void main(String[] args) throws InterruptedException {
for (int i = 1; i <= 10000; i++) {
String name="线程" + i;
A a=new A(name);
Thread t=new Thread(a);
t.start();
}
Thread.sleep(5000L);
System.out.println("atomInteger : " + atomInteger.get());
System.out.println("int : " + total);
}
}
-- / ++ 都不是线程安全的,你的totalTicketNumber可以用AtomicInteger代替,或者像楼上一样加锁class A implements Runnable{
private static int totalTicketNumber=100;//总票数
private String name;
public A(String name) {
this.name=name;
}
@Override
public void run() {
for (int j = 0; j < 5; j++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (this) {
totalTicketNumber--;
System.out.println(Thread.currentThread().getName()+" "+totalTicketNumber);
}
}
}
public static void main(String[] args) throws InterruptedException {
String name="线程";
A a=new A(name);
for (int i = 1; i <= 5; i++) {
Thread t=new Thread(a,"线程"+i);
t.start();
}
}
}
可以改成这样