文档章节

Java多线程小练习,闹钟

Java_lang
 Java_lang
发布于 2015/06/03 12:23
字数 238
阅读 129
收藏 1
package com.konghao.test;
//闹钟类
public class Alarm implements Runnable {
    private boolean isWork; //闹钟是否工作
    

    public Alarm() {
        super();
        this.isWork = false; //没在响;
    }

    public boolean isWork() {
        return isWork;
    }


    public void setWork(boolean isWork) {
        this.isWork = isWork;
    }


    //闹方法
    public void work(){
        synchronized (this) {
            //闹钟运行时,打印字符
            if(isWork){
                System.out.println("it's time for up!");
                this.notify();
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            this.setWork(true);
            work();
        }
    }
    
}
package com.konghao.test;
//用户类
public class User implements Runnable{
    private String name;
    private Alarm myAlarm;
    
    public User(String name, Alarm myAlarm) {
        super();
        this.name = name;
        this.myAlarm = myAlarm;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Alarm getMyAlarm() {
        return myAlarm;
    }
    public void setMyAlarm(Alarm myAlarm) {
        this.myAlarm = myAlarm;
    }
    public void stopAlarm(){
        synchronized (myAlarm) {
            if(myAlarm.isWork()){
                myAlarm.setWork(false);
                System.out.println(this.name+"按了闹钟!");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally{
                    myAlarm.notify();
                    try {
                        myAlarm.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }else{
                try {
                    myAlarm.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Override
    public void run() {
        while(true){
            stopAlarm();
        }
        
    }
    
}
//测试类
package com.konghao.test;

public class Test {
    public static void main(String[] args) {
        Alarm al = new Alarm();
        User u = new User("小胖",al);
        Thread ut = new Thread(u);
        Thread at = new Thread(al);
        
        ut.setDaemon(true);
        ut.start();
        at.start();
    }
    
    
}


© 著作权归作者所有

Java_lang
粉丝 0
博文 1
码字总数 238
作品 0
江北
程序员
私信 提问
Java__线程---基础知识全面实战---坦克大战系列为例

今天想将自己去年自己编写的坦克大战的代码与大家分享一下,主要面向学习过java但对java运用并不是很熟悉的同学,该编程代码基本上涉及了java基础知识的各个方面,大家可以通过练习该程序对自...

x-knight_勋爵
2016/04/02
0
0
自学了java基础,在学习多线程、java类集框架、I/O、这些知识时感觉有点吃力,看过后感觉记不住,可以推荐一些关于这些的小项目做练习吗?或者哪些网站上有适合我这个水平的这种项目?

自学了java基础,在学习多线程、java类集框架、I/O、这些知识时感觉有点吃力,看过后感觉记不住,可以推荐一些关于这些的小项目做练习吗?或者哪些网站上有适合我这个水平的这种项目?...

南燕北灰
2015/12/03
820
6
好程序员Java教程解读什么是swing

  好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用。运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便。现在的java主要以web方向为主,...

好程序员IT
07/24
30
0
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
学习大数据需要Java基础吗?

近几年,很多人都听到过一个名词“大数据”也有一部分人选择学习了解大数据,那么大数据到底是什么,学习大数据需要有Java基础吗? 推荐一个大数据学习交流群 119599574每天晚上20:10都有一节...

大数据大咖
2018/06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
697
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
74
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
73
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部