Sina.iRoid
چهارشنبه 26 آذر 1393, 17:33 عصر
سلام دوستان. یه سوالی داشتم، لطف می کنید اگر راهنماییم کنید.
اگه به کد ها دقت کنید، این برنامه یه تولید کننده داره و یه مصرف کننده. باید به ازای اجرای هربار تولید کننده، مصرف کننده هم اجرا بشه.
کد کلاس Q
package ir.blog.javairoid.main;
public class Q {
int n;
boolean valueSet = false;
synchronized int get(){
if (!valueSet) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Interrupted.");
}
}
System.out.println("Get: " + n);
valueSet = false;
notify();
return n;
}
synchronized void put(int n){
if (valueSet) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Interrupted.");
}
}
this.n = n;
valueSet = true;
System.out.println("Put: " + n);
notify();
}
}
کد کلاس Producer
package ir.blog.javairoid.main;
public class Producer implements Runnable {
Q q;
// Constructor
public Producer(Q q) {
this.q = q;
new Thread(this, "Producer").start();
}
@Override
public void run() {
int i = 0;
while (true) {
q.put(i++);
}
}
}
کد کلاس Consumer
package ir.blog.javairoid.main;
public class Consumer implements Runnable {
Q q;
// Constructor
public Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer").start();
}
@Override
public void run() {
while (true) {
q.get();
}
}
}
و این هم کد کلاس اصلی
package ir.blog.javairoid.main;
public class MainClass {
public static void main(String[] args) {
Q q = new Q();
new Producer(q);
new Consumer(q);
}
}
دوستان سوال من در مورد کلاس Q هست. اصلا متوجه کاربرد متد های wait و notify نمیشم. و اینکه دستور if دقیقا چیه!؟ یعنی مقدارش false(ه) یا true!؟
ممنون میشم اگر در این چند مورد راهنماییم کنید.
اگه به کد ها دقت کنید، این برنامه یه تولید کننده داره و یه مصرف کننده. باید به ازای اجرای هربار تولید کننده، مصرف کننده هم اجرا بشه.
کد کلاس Q
package ir.blog.javairoid.main;
public class Q {
int n;
boolean valueSet = false;
synchronized int get(){
if (!valueSet) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Interrupted.");
}
}
System.out.println("Get: " + n);
valueSet = false;
notify();
return n;
}
synchronized void put(int n){
if (valueSet) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Interrupted.");
}
}
this.n = n;
valueSet = true;
System.out.println("Put: " + n);
notify();
}
}
کد کلاس Producer
package ir.blog.javairoid.main;
public class Producer implements Runnable {
Q q;
// Constructor
public Producer(Q q) {
this.q = q;
new Thread(this, "Producer").start();
}
@Override
public void run() {
int i = 0;
while (true) {
q.put(i++);
}
}
}
کد کلاس Consumer
package ir.blog.javairoid.main;
public class Consumer implements Runnable {
Q q;
// Constructor
public Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer").start();
}
@Override
public void run() {
while (true) {
q.get();
}
}
}
و این هم کد کلاس اصلی
package ir.blog.javairoid.main;
public class MainClass {
public static void main(String[] args) {
Q q = new Q();
new Producer(q);
new Consumer(q);
}
}
دوستان سوال من در مورد کلاس Q هست. اصلا متوجه کاربرد متد های wait و notify نمیشم. و اینکه دستور if دقیقا چیه!؟ یعنی مقدارش false(ه) یا true!؟
ممنون میشم اگر در این چند مورد راهنماییم کنید.