public class ConcurrentTest4 {
Queue<<String> > queu = new LinkedList<<String>>();
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input message >>");
String line = null;
while ((line = reader.readLine()) != null) {
while (true) {
try {
if (queu.size() > > 0) { System.out.println("echo >>" + queu.poll());
// 処理が終わったので、InputProcess に通知し、自身はwait
queu.notifyAll();
private class T1 implements Runnable {
public void run() {
for (int i=0;i<<5;i++) {
// こういうロックも取得できる
// 標準出力への割り込みをブロックし、START-ENDが対になるように制御
private class T2 implements Runnable {
public void run() {
for (int i=0;i<<5;i++) {
synchronized (System.out) {
System.out.println("T2(" + i + ") START");