多线程 - java 线程同步问题
PHP中文网
PHP中文网 2017-04-18 09:50:26
0
5
445

如下两个线程类:

public class A implements Runnable{
    private StringBuilder sb;
    
    @Override
    public void run() {
        //操作sb缓冲
        .......
    }
    public StringBuilder getsb() {
        return sb;
    }

    public void setsb(StringBuilder sb) {
        this.sb = sb;
    }
}

public class B implements Runnable{
    //此处得到A类的对象a
    
    @Override
    public void run() {
        //操作a.getsb()缓冲
        .......
    }
}

如何能保证,A、B互斥?

A的线程在操作sb的时候加锁,让B不能操作;或者B的线程在操作sb的时候加锁,让A不能操作

始终只有一个线程可以操作sb!!

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(5)
阿神

으아아아

Ty80

synchronized을 시도해 보세요. 여러 세부 단위로 제공됩니다.
@scort처럼 코드 블록에 추가할 수도 있고, 객체에 추가할 수도 있습니다.

PHPzhong

synchronized 또는 ReentrantLock. 이전에 누군가가 동기화의 예를 들었습니다. 여기에서 ReentrantLock의 예를 들겠습니다.

으아악
Ty80

이때 StringBuffer를 직접 사용하는 것을 고려할 수 있습니다. StringBuilder와의 유일한 차이점은 전자가 스레드로부터 안전하다는 것입니다.

大家讲道理

개인적으로는 스레드 실행이 필요한 메서드를 먼저 제시하고 그 메서드에 잠금을 추가한 다음 여러 스레드를 제거해야 한다고 생각합니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!