스레드 및 스레드 풀
왜 스레드 동기화
public class Bank {
private int count =0;//
//
public void addMoney(int money){
count += money;
System.out.println(System.currentTimeMillis()+" :"+money);
}
//
public void subMoney(int money){
if(count-money < 0){
System.out.println(" ");
return;
}
count -=money;
System.out.println(+System.currentTimeMillis()+" :"+money);
}
//
public void lookMoney(){
System.out.println(" :"+count);
}
}~~~
##### 1 --
synchronized 키워드로 수식하는 방법.자바의 모든 대상에 내장 자물쇠가 있기 때문에 이 키워드로 수식할 때
。 , , 。
synchronized 키워드도 정적 방법을 수식할 수 있습니다. 이 정적 방법을 사용하면 클래스 전체를 잠글 수 있습니다.
public class Bank {private int count=0;//계정 잔액//입금 public synchronized addmoney(int money) {--synchronized 수식 방법 count+=money; System.out.println(System.currentTime Millis) +'입금:'+ money);//인출public synchronized void subMoney(int money) {--synchronized 수식 방법if(count-money < 0) {System.out.println(잔액 부족);return;count -=money; System.out.println(+System.currentTimeMillis() + 꺼내기:+money);}//public void lookMoney () {System.out.println ("계정 잔액:"+count);} ~~
멀티스레드 동기화 방법2 - 코드 블록 동기화
### synchronized 。 , 。
### , 。 ,
synchronized 。
public class Bank {
private int count =0;//
//
public void addMoney(int money){
synchronized (this) { -- synchronized
count +=money;
}
System.out.println(System.currentTimeMillis()+" :"+money);
}
//
public void subMoney(int money){
synchronized (this) { -- synchronized
if(count-money < 0){
System.out.println(" ");
return;
}
count -=money;
}
System.out.println(+System.currentTimeMillis()+" :"+money);
}
//
public void lookMoney(){
System.out.println(" :"+count);
}
}~~~
##### 3 -- Volatile
- volatile 。
- volatile 。
- , 。
- volatile , final 。
- : volatile , volatile synchronized。 volatile , 。 volatile , , 。 。
결과가 동기화되지 않음
public class Bank {private volatile int count = 0;//계정 잔액 -volatile 코스메틱 변수//입금 public void addmoney (int money) {count + = money; System.out.println (System.currentTime Millis () + "저장:"+ money)인출public void subMoney(int money) {if(count - money <0) {시스템.out.println(잔액 부족);return;count -= money; System.out.println(+System.currentTimeMillis() + 꺼내기:+ money);}//public void lookMoney () {System.out.println ("계정 잔액:"+ count);} ~~
Java 멀티스레드 동기화 방법4 - Lock 잠금
public class Bank {
private int count = 0;//
//
private Lock lock = new ReentrantLock();
//
public void addMoney(int money) {
lock.lock();//
try{
count += money;
System.out.println(System.currentTimeMillis() + " :" + money);
}finally{
lock.unlock();//
}
}
//
public void subMoney(int money) {
lock.lock();
try{
if (count - money < 0) {
System.out.println(" ");
return;
}
count -= money;
System.out.println(+System.currentTimeMillis() + " :" + money);
}finally{
lock.unlock();
}
}
//
public void lookMoney() {
System.out.println(" :" + count);
}
}~~~
##### Java 5 --
- : ,
- **ThreadLocal **: ThreadLocal , , , , 。-- , , 。
- **ThreadLocal **:ThreadLocal
- “ ” , “ ”
public class Bank { private static ThreadLocal count = new ThreadLocal(){ @Override protected Integer initialValue() {//TODO Auto-generated method stub return 0; } };//입금public void addMoney(int money) {count.set(count.get()+money), System.out.println(System.currentTime Millis()+"입금:"+ money),}//인출public void subMoney(int money) {if(count.get()-money <0) {System.out.println(잔액 부족);return;count.set(count.get()- money); System.out.println(+System.currentTimeMillis() + 꺼내기:+ money);}//public void lookMoney () {System.out.println ("계정 잔액:"+ count.get ();}운행 효과: 잔액 부족 계좌 잔액: 0 잔액 부족 계좌 잔액: 0 1441794247939 예금: 100 계좌 잔액: 100 잔액 부족 1441794248940 예금: 100 계좌 잔액: 0 계좌 잔액: 200 잔액 부족 계좌 잔액: 0 1441794249941 예금: 100 계좌 잔액: 300~~~
Java의 네 가지 스레드 풀
분류하다
스레드 탱크의 역할
스레드 풀의 이점:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.