为什么我后面的两个测试类写的应该一样,为什么第一个测试类结果输出的不对?
package com.example.scope.threadSafe;
public class AccountService {
//余额
public Integer balance=1000;
//存钱
public void add(Integer money){
Integer newMoney=balance+money;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
balance=newMoney;
}
//取钱
public void sub(Integer money){
Integer newMoney=balance-money;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
balance=newMoney;
}
}
package com.example.scope.threadSafe;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
@SpringBootTest(classes = AccountService.class)
public class AccountServiceTest {
@Bean
@Scope("prototype")
public AccountService accountService() {
return new AccountService();
}
@Test
public void test(@Autowired AccountService accountService1, @Autowired AccountService accountService2) throws InterruptedException {
new Thread(()->{
accountService1.add(500);
}).start();
new Thread(()->{
accountService2.sub(500);
}).start();
Thread.sleep(3000);
System.out.println(accountService1.balance);
System.out.println(accountService2.balance);
}
}
package com.example.scope.threadSafe;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
@SpringBootTest(classes = ASTest.class)
public class ASTest {
@Bean
@Scope("prototype")
public AccountService accountService() {
return new AccountService();
}
@Test
public void test(@Autowired AccountService accountService1, @Autowired AccountService accountService2) throws InterruptedException {
new Thread(()->{
accountService1.add(500);
}).start();
new Thread(()->{
accountService2.sub(500);
}).start();
Thread.sleep(3000);
System.out.println(accountService1.balance);
System.out.println(accountService2.balance);
}
}