/** 쓰레드 연습 **/
class Data{
private String data;
private boolean is_saved = false;
public synchronized void setData(String arg){
try{
if(is_saved){
wait();
}
}
catch (Exception e) {
System.out.println("SET error");
}
data = arg;
is_saved = true;
notify();
}
public synchronized String getData(){
try{
if(!is_saved)
wait();
}
catch (Exception e) {
System.out.println("GET error");
}
String r = data;
data = "";
is_saved =false;
notify();
return r;
}
public boolean is_saved(){
return is_saved;
}
}
class Producer extends Thread{
Data s;
Producer(String msg, Data ss){
s=ss;
System.out.println(msg);
}
public void run(){
int i=0;
while(i<10){
try{
sleep((long)(Math.random()*1000));
}
catch (Exception e) {
// TODO: handle exception
}
System.out.println( "producer is running : " +i);
s.setData("DATA ("+i+"): " + produce());
i++;
}//end while
}//end run
private String produce(){
int r ;
r =(int)( Math.random()*10);
return "" + r;
}
}
class Consumer extends Thread{
Data s;
Consumer(String msg,Data ss){
s = ss;
System.out.println(msg);
}
public void run(){
int i=0;
String data="";
while(i<10){
try{
sleep((long)(Math.random()*1000));
}
catch (Exception e) {
// TODO: handle exception
}
System.out.println( "consumer is running : " + i);
data =s.getData();
System.out.println(">> " + data);
i++;
}//end while
}//end run
}
class Ttest{
public static void main(String args[])
{
Data data = new Data();
Producer t1 = new Producer("P thread is ready", data);
Consumer c1 = new Consumer("C thread is ready", data);
t1.start();
c1.start();
}
}
/**
class Data{
private String data;
private boolean is_saved = false;
public void setData(String arg){
data = arg;
is_saved = true;
}
public String getData(){
String r = data;
data = "";
is_saved =false;
return r;
}
public boolean is_saved(){
return is_saved;
}
}
class Producer extends Thread{
Data s;
Producer(String msg, Data ss){
s=ss;
System.out.println(msg);
}
public void run(){
int i=0;
try{
while(i<10){
System.out.println( "producer is running : " +i);
if(s.is_saved()){
yield();
}
else{
s.setData("DATA ("+i+"): " + produce());
i++;
}
}//end while
}
catch (Exception e) {
System.out.println(e);
// TODO: handle exception
}
}//end run
private String produce(){
int r ;
r =(int)( Math.random()*10);
return "" + r;
}
}
class Consumer extends Thread{
Data s;
Consumer(String msg,Data ss){
s = ss;
System.out.println(msg);
}
public void run(){
int i=0;
String data="";
try{
while(i<10){
System.out.println( "consumer is running : " + i);
if(s.is_saved()){
data =s.getData();
System.out.println(">> " + data);
//notifyAll();
i++;
}
else{
yield();
yield();
//this.wait();
//this.suspend();
}
}//end while
}
catch (Exception e) {
System.out.println(e);
// TODO: handle exception
}
}//end run
}
class Ttest{
public static void main(String args[])
{
Data data = new Data();
Producer t1 = new Producer("P thread is ready", data);
Consumer c1 = new Consumer("C thread is ready", data);
t1.start();
c1.start();
}
}
**/
