이 동기화 블록은 내가 자바 동기화 블록을 얻을 수 없습니다입니다
내가이 다음 게시물을 읽을 수는 있지만 매우 SYN-블록과 잠금Synchronized block not working
에 대해 못해서 아주 잘 작동하지 않는 내가 A의, B의, C의 그것을 동기화 후에도 균일하게 배열하여 출력되지 않은 이유 코드 아래 몰라 .. C의
public class synchronizeblock
{
static StringBuffer s=new StringBuffer();
public static void main(String []args)
{
Threading t1=new Threading(s,'a');
Threading t2=new Threading(s,'b');
Threading t3=new Threading(s,'c');
t1.start();
t2.start();
t3.start();
}
}
class Threading extends Thread
{
StringBuffer sb;
char ch;
Threading()
{
}
Threading(StringBuffer sb,char ch)
{
this.sb=sb;
this.ch=ch;
}
public void run()
{
synchronized(this) // this(current instance) acts as lock ??
{
for(int i=0;i<20;++i)
{
System.out.print(ch);
}
}
}
}
한 출력의 ASE에은 다음과 같습니다 :
bbbbbbbbbbbbbaccccccccccccccccccccaaaaaaaaaaaaaaaaaaabbbbbbb
내 관심사는 스레드가 시작되면, 스레드가 문자 'B'로해야하지 (이 "하나"스레드 - 일) 말하는 것입니다 다른 스레드가 스레드 "하나"개체에 잠금을 가지고 있기 때문에, 실행 잘못 오전 경우에 저를 정정 할 기회를 얻고 난 다음 질문
정말 "W"고정됩니다 무엇 "과 혼란을하기 전에 완료 모자는 자물쇠 역할을합니다. " 그래서 정확히 내 코드
와 내가 균일 한 출력을 얻기 위해 무엇을해야에 잠겨있어 무엇인지 설명
'synchronized'는 주어진 객체에 잠금을 걸고,'this'는이 경우입니다. 당신은 3 개의 Threading 인스턴스를 가지므로 3 개의 다른 객체를 잠그고, 그 밖의 객체를 잠그려고하지 않으므로 잠금은 아무런 효과가 없습니다. – Andreas
"물체에 고정되어있어"라고 말하면 어떤 물체입니까? –
@Andreas는 동기화 (aaaa)를 고려하여 aaaa가 자물쇠처럼 작동하지 않고 오히려 잠금 상태가되면 잘못했는지 확인합니다. – viru