Java作业
今天的作业题/*1、使用生产者和消费者模式实现,交替输出:
假设只有两个线程,输出以下结果:
t1-->1
t2-->2
t1-->3
t2-->4
t1-->5
t2-->6
....
要求:必须交替,并且t1线程负责输出奇数。t2线程负责输出偶数。
两个线程共享一个数字,每个线程执行时都要对这个数字进行:++
*/
public class Test {
public static void main(String[] args) {
Num num=new Num(1);
Thread t1=new Thread(new OddNumThread(num));
Thread t2=new Thread(new EvenNumThread(num));
t1.setName("奇数线程");
t2.setName("偶数线程");
t1.start();
t2.start();
}
}
class Num{
private int i;
public Num() {
}
Num(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
class OddNumThread implements Runnable{
private Num num;
public OddNumThread() {
}
public OddNumThread(Num num) {
this.num = num;
}
public void run() {
while (true){
synchronized(num){
if (num.getI() %2 != 0){
System.out.println(Thread.currentThread().getName()+"-->"+num.getI());
int i=num.getI();
num.setI(++i);
num.notify();
}else {
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class EvenNumThread implements Runnable{
private Num num;
public EvenNumThread() {
}
public EvenNumThread(Num num) {
this.num = num;
}
public void run() {
while (true){
synchronized(num){
if (num.getI() %2 == 0){
System.out.println(Thread.currentThread().getName()+"-->"+num.getI());
int i=num.getI();
num.setI(++i);
num.notify();
}else {
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
} dnn 发表于 2020-11-11 16:09
工作中多线程用的不多,但是确实挺重要的
我感觉也看业务吧我们平时工作中用的还是挺多的 哈哈,最近也在学线程
wait()应该换成sleep(1000); 166818008 发表于 2020-11-10 20:37
哈哈,最近也在学线程
wait()应该换成sleep(1000);
哈哈,题目就这么要求的,使用生产者和消费者模式实现 17684047927 发表于 2020-11-10 21:11
哈哈,题目就这么要求的,使用生产者和消费者模式实现{:301_978:}
建议把类分开来放,这样简单易读 166818008 发表于 2020-11-10 20:37
哈哈,最近也在学线程
wait()应该换成sleep(1000);
老师教的要这样写,我这样写感觉老师都要骂人了{:1_890:}
class OddNumThread implements Runnable{
private Num num;
public OddNumThread() {
}
public OddNumThread(Num num) {
this.num = num;
}
public void run() {
while (true){
synchronized(num){
if (num.getI() %2 == 0){
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"-->"+num.getI());
int i=num.getI();
num.setI(++i);
num.notify();
}
}
}
} 166818008 发表于 2020-11-10 21:20
建议把类分开来放,这样简单易读
写一个文件里写习惯了,哈哈。慢慢改过来 17684047927 发表于 2020-11-10 21:21
老师教的要这样写,我这样写感觉老师都要骂人了
class OddNumThread i ...
写给自己看当然可以,不过要养成好习惯,后面做项目时,避免代码杂乱 当时学多线程可给我绕晕了 共享资源分配,同步
页:
[1]