注册 登录
重磅消息:开通VIP会员,获取平台所有项目,永久使用,详细请咨询QQ:3376762016
远程服务部署安装,售后服务,请加QQ1:3376762016,QQ2:3597230140(即将满员),QQ3:1399491757(已满)
查看: 1008|回复: 0
打印 上一主题 下一主题

线程类采用实现Runnable接口的方式。诗歌存为String 数组。所有线程都是从该数组中

[复制链接]

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
668970
QQ
跳转到指定楼层
楼主
发表于 2020-4-13 15:34:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
4.9 日多线程课程作业
编程
模拟集体诗朗诵的场景(四人同时朗诵一首诗,每人一句。)
编程要求
“床前明月光,疑是地上霜,举头望明月,低头思故乡”
编写一个包含四个线程的程序,要求诗歌中的诗句由不同的线程依次输出。
Tips:线程类采用实现Runnable接口的方式。诗歌存为String 数组。所有线程都是从该数组中获取要输出的内容。
注意:编程题要求形成word文档提交。代码和运行截图 word文档的构成内容。
注意本周日将进行第二次单元测。测试内容为线程之前的内容(包括线程内容)
代码:
public class TestMain {
        public static ReadString read;
        public static void main(String[] args) {
                Object lock = new Object();
                read = new ReadString();
                new ReadThread(0, read, lock).start();
                new ReadThread(1, read, lock).start();
                new ReadThread(2, read, lock).start();
                new ReadThread(3, read, lock).start();
        }
}
class ReadString {
        private String[] read = { "床前明月光","疑是地上霜","举头望明月","低头思故乡" };
        public synchronized void read(int id, int index) {
                if (index >3)
                        return;
                System.out.print("Thread :" + id + " read String :" + read[index] + " \n");
        }
}
class ReadThread extends Thread {
        private int threadId;
        private ReadString reads;
        private Object lock;
        private final int COUNT = 4;
        public static volatile int flag = 0;
        public ReadThread(int id, ReadString read, Object lock) {
                this.threadId = id;
                this.reads = read;
                this.lock = lock;
        }
        @Override
        public void run() {
                // TODO Auto-generated method stub
                while (true) {
                        synchronized (lock) {
                                if ((flag % COUNT) == threadId) {
                                        reads.read(threadId, flag);
                                        flag++;
                                        lock.notifyAll();
                                } else {
                                        try {
                                                lock.wait();
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                        }
                }
        }
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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