吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2433|回复: 9
收起左侧

[Java 转载] Java作业

  [复制链接]
西楠 发表于 2020-11-10 19:39
    今天的作业题
[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();
                    }
                }
            }
        }
    }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

vsans 发表于 2020-11-11 16:28
dnn 发表于 2020-11-11 16:09
工作中多线程用的不多,但是确实挺重要的

我感觉也看业务吧  我们平时工作中用的还是挺多的
166818008 发表于 2020-11-10 20:37
哈哈,最近也在学线程
wait()应该换成sleep(1000);
 楼主| 西楠 发表于 2020-11-10 21:11
166818008 发表于 2020-11-10 20:37
哈哈,最近也在学线程
wait()应该换成sleep(1000);

哈哈,题目就这么要求的,使用生产者和消费者模式实现
166818008 发表于 2020-11-10 21:20
17684047927 发表于 2020-11-10 21:11
哈哈,题目就这么要求的,使用生产者和消费者模式实现


建议把类分开来放,这样简单易读
 楼主| 西楠 发表于 2020-11-10 21:21
166818008 发表于 2020-11-10 20:37
哈哈,最近也在学线程
wait()应该换成sleep(1000);

老师教的要这样写,我这样写感觉老师都要骂人了
[Java] 纯文本查看 复制代码
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();
            }
        }
    }
}
 楼主| 西楠 发表于 2020-11-10 21:24
166818008 发表于 2020-11-10 21:20
建议把类分开来放,这样简单易读

写一个文件里写习惯了,哈哈。慢慢改过来
166818008 发表于 2020-11-10 21:27
17684047927 发表于 2020-11-10 21:21
老师教的要这样写,我这样写感觉老师都要骂人了
[mw_shl_code=java,true]class OddNumThread i ...

写给自己看当然可以,不过要养成好习惯,后面做项目时,避免代码杂乱
zydf 发表于 2020-11-11 13:52
当时学多线程可给我绕晕了
oXid 发表于 2020-12-12 15:18
共享资源分配,同步
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-28 07:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表