JAVA 다중 스레드 - 클래스 잠금(여러 객체가 동일한 잠금)
2232 단어 JAVA 동시 프로그래밍
이전의 계정 클래스를 계속하고 코드를 수정합니다
계정 클래스:
package com.ck.thread;
import java.math.BigDecimal;
public class Account {
public static synchronized void add(BigDecimal amount , String name) {
System.out.println(name + ", , : " + amount);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + ", , : " + amount);
}
}
같은 충전 클래스도 수정:
package com.ck.thread;
import java.math.BigDecimal;
public class CzThread extends Thread{
private Account account;
private String accountName;
public CzThread(Account account) {
this.account = account;
}
@Override
public void run() {
account.add(new BigDecimal("100"), accountName);
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
}
그리고 메인 라인을 테스트합니다.
package com.ck.thread;
public class MainThread {
public static void main(String[] args) throws InterruptedException {
/**
* ,
*
*/
Account account1 = new Account();
Account account2 = new Account();
CzThread t1 = new CzThread(account1);
t1.setAccountName(" ");
t1.start();
CzThread t2 = new CzThread(account2);
t2.setAccountName(" ");
t2.start();
}
}
실행 결과:
, , : 100
, , : 100
, , : 100
, , : 100
우리는 이사가 장삼이 충전이 끝나야 충전에 들어갈 수 있다는 것을 보았다. 사실 이런 충전 방법은 현실에서 만약에 그렇다면 시스템이 이미 고소를 당했을 것이다. 우리는 단지 테스트 시범을 보였을 뿐이다. 사람들이 클래스의 자물쇠를 더욱 잘 이해하도록 하기 위해 동기화하는 방법에static 키워드를 추가했다. 그러면 이 자물쇠는 이런 종류에 속한다. 즉, 이 종류의 모든 대상에 작용하는 것이다.