디자인 모델 - 독자, 작성 자
/*
*
*
* */
class Buffer
{
public String buffer[] = new String[10];//
public boolean flag = false;//
public int i=0;//
}
class Writer implements Runnable //
{
private Buffer buffer;
public Writer(Buffer buffer)
{
this.buffer = buffer;
}
@Override
public void run()
{
while (true)//
{
synchronized (buffer)// , ,
{
while (buffer.flag)// flag=true, , , ,
{
try
{
buffer.wait();
} catch (InterruptedException ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace(System.out);
}
}
if (buffer.i == buffer.buffer.length)
{
System.out.println(" , ");
buffer.buffer = new String[10];
buffer.i = 0;
}
buffer.buffer[buffer.i] = " " + buffer.i;//
System.out.println(Thread.currentThread().getName()+" " + buffer.i + " :" + buffer.buffer[buffer.i]);
buffer.i = buffer.i + 1;//
buffer.flag = true;
buffer.notifyAll();
}
try
{
Thread.sleep(100);
} catch (Exception ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace(System.out);
}
}
}
}
class Reader implements Runnable
{
private Buffer buffer;
public Reader(Buffer buffer)
{
this.buffer = buffer;
}
@Override
public void run()
{
while (true) //
{
synchronized (buffer)
{
while (!buffer.flag)
{
try
{
buffer.wait();
} catch (InterruptedException ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace(System.out);
}
}
System.out.print(Thread.currentThread().getName()+" :");
for (int i = 0; i < buffer.i; i++)
{
System.out.print(buffer.buffer[i]);
}
System.out.println();
buffer.flag = false;
buffer.notifyAll();
}
try
{
Thread.sleep(100);// , , ,
} catch (InterruptedException ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace(System.out);
}
}
}
}
/*
* , ,
* , , , ---
* , , ,
* , , wait , ,
* , , , ,
* if(buffer.flag) wait , , , , ,
* , if(buffer.flag) while(buufer.flag) buffer.notify buffer.notifyAll();
*
* while(flag) notifyAll , , , ,
*
*/
public class ReaderandWriter
{
public static void main(String args[])
{
Buffer buffer = new Buffer();
Thread t1 = new Thread(new Writer(buffer));
Thread t2 = new Thread(new Writer(buffer));
Thread t3 = new Thread(new Reader(buffer));
Thread t4 = new Thread(new Reader(buffer));
t1.start();
t2.start();
t3.start();
t4.start();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.