文档章节

线程高级

凯哥学堂
 凯哥学堂
发布于 2017/07/08 23:25
字数 685
阅读 12
收藏 0
点赞 0
评论 0

例题,哲学家用餐:

在一张餐桌上坐着五个哲学家,但是却只有五根筷子,每个哲学家只有一根筷子,所以当一个哲学家要夹菜的时候需要用他旁边那个哲学家的筷子,被拿走筷子的哲学家则只能等待那个哲学家吃完放下筷子他才能夹菜。

示意图: image 设计思路: 首先编写一个筷子类,每根筷子都是一个对象,这个类里有拿起、放下两个方法;当一个哲学家线程来调用拿起方法时,下一个哲学家线程就要进入等待状态,然后这个哲学家线程调用放下方法后,就激活那个等待中的哲学家线程,以此循环,轮流使用筷子。

代码示例:

image 接着设计哲学家类,这个类继承Thread类,每个哲学家都是一个线程对象。这类有三个属性,用于存放构造器的参数,这个类的构造器要求传递三个参数,分别是哲学家的名字(name)、右边的筷子(right)、左边的筷子(left)。左右筷子的类型都是筷子类型,也就是需要传递两个筷子对象。然后遍写拿起和放下方法,这个两个方法里分别调用着筷子类的拿起、放下方法。在run方法里使用死循环调用拿起和放下方法,并且使用sleep设置一个间隔时间。

代码示例:

image image 最后编写测试类,测试类里构建五个筷子对象。然后构建五个哲学家对象,分别传递相应的参数。接着将哲学家对象使用start方法启动。

代码示例:

image

运行结果:

image 将这个例题升级为图形化版: 先构建出界面,将JPanel的背景颜色都设置为白色: image 筷子类不需要更改,哲学家类则需要添一个JPanel类型的属性用来存放构造器的参数,构造器加多一个JPanel类型的参数。然后在拿起方法里设置JPanel的背景颜色为红色。在放下方法里则设置回白色。

代码示例:

image 测试类添加一个线程内部类来调用窗口类的main方法。

代码示例:

image

运行结果:

image 定时器类: Timer定时器类是与线程相关的一个工具类,顾名思义这个类能够到了设置的时间就运行一些代码,这些代码写在run方法里。使用这个类的时候需要继承TimerTask类,使用Timer对象调用schedule方法实现定时。

代码示例:

image

© 著作权归作者所有

共有 人打赏支持
凯哥学堂
粉丝 10
博文 287
码字总数 257252
作品 0
东城
程序员
Kafka的高级消费者与低级消费者

在Kafka实战章节,我们写的例子都是Kafka的高级消费实例,可以看到在消息消费者的程序中,我们只需要指定zookeeper、及消费群组的groupId即可实现从消息队列中消费消息,屏蔽了大量的底层细节...

u012050154 ⋅ 2017/11/20 ⋅ 0

java并发编程(十二): 显示锁

显示锁: Lock与ReentrantLock: Lock接口 void lock(); //获取锁void lockInterruptibly() throws InterruptedException; //获取锁,且当前线程可被中断boolean tryLock(); //尝试获取锁,t...

ihaolin ⋅ 2014/04/27 ⋅ 0

10.2. Python 多线程

import threading class MyThread(threading.Thread): def test(): if name=='main': 这里实现了一个计数器 count 这个全局变量会被多个线程同时操作,使其能够被顺序相加,需要靠线程锁的帮...

玄学酱 ⋅ 01/11 ⋅ 0

Java并发教程-1进程和线程

http://www.iteye.com/magazines/131 计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理...

noday ⋅ 2014/04/25 ⋅ 0

c++ 网络编程怎么学?需要哪些必要的基础.

@伤神小怪兽 你好,想跟你请教个问题: 我非常想学习HP-SOCKET.有一点C++基础,什么线程这些高级没学过. 请问怎么学?需要哪些必要的基础. 我觉得是要网络,C++高级,这些/还需要什么吗?希望回答...

泥沙砖瓦浆木匠 ⋅ 2014/06/14 ⋅ 3

LVM很好很强大

LVM (Logic Volume Management,逻辑卷管理),是传统商业Unix就带有的一项高级磁盘管理工具,异常强大。后来LVM移植到了Linux操作系统上,尽管不像原来Unix版本那么强大,但瘦死的骆驼比马大,...

Start-up ⋅ 2012/05/28 ⋅ 1

服务器攻防·禁止穷举邮箱密码

服务器攻防·禁止穷举邮箱密码 原创 2016-11-02 景峯 Netkiller 本文节选自《Netkiller Linux 手札》 下面是一个脚本你可以放在crontab中运行,每个一定时间运行一次。 #!/bin/bash Homepage...

neo-chen ⋅ 2016/11/02 ⋅ 0

Qt学习系列4--使用线程

之前写qt程序的时候代码都是在一个gui线程中运行的,如果遇到一些比较耗时的操作会使界面失去响应,那么就需要把这些耗时的操作放到另一个线程中去,然后通过信号和槽与主界面进行通信。 如果...

dosmlp ⋅ 2014/07/30 ⋅ 0

分布式服务防雪崩熔断器,Hystrix理论+实战。

Hystrix是什么? hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hys...

架构之路 ⋅ 2017/12/05 ⋅ 0

移动端APP闪退的主要原因总结

移动端APP闪退的主要原因总结如下: 1.空指针:对象没有初始化就使用了; 2.空函数:有事件源但没有对应的事件对象; 3.死循环:没有合理的循环控制流; 4.内存泄露:同一个对象不停地开辟,...

yangiris ⋅ 2014/04/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 21分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 26分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 29分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 32分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

阿里云云栖社区 ⋅ 35分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 37分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 40分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 40分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 44分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

猫耳m ⋅ 45分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部