文档章节

线程高级

凯哥学堂
 凯哥学堂
发布于 2017/07/08 23:25
字数 685
阅读 12
收藏 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

© 著作权归作者所有

共有 人打赏支持
上一篇: eclipse快捷键
下一篇: 制作画板.md
凯哥学堂
粉丝 17
博文 316
码字总数 284948
作品 0
东城
程序员
私信 提问
Kafka的高级消费者与低级消费者

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

u012050154
2017/11/20
0
0
java并发编程(十二): 显示锁

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

ihaolin
2014/04/27
0
0
10.2. Python 多线程

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

玄学酱
01/11
0
0
【读书笔记】iOS-使用GCD改善性能

一,队列简介。 有些与并行处理相关的术语令人迷惑。线程是一个常用的术语,在iOS应用中,线程是标准的POSIX线程。从技术上说,线程不过是一组指令,可在进程中独立地处理;在同一个进程中,...

菜鸟and小白
12/13
0
0
c++ 网络编程怎么学?需要哪些必要的基础.

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

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

没有更多内容

加载失败,请刷新页面

加载更多

EOS账户如何工作,我们如何获取eos账号?

EOS账户的工作方式是什么?帐户是存储在区块链中的人类可读名称。它可以由个人或一群人拥有,具体的取决于权限配置。需要一个帐户来将交易转移或推送到区块链。——EOSIO Wiki EOS账户如何工...

笔阁
14分钟前
0
0
iOS面试之@property

https://github.com/acBool/Blogs/blob/master/property/%40property%E4%BB%8B%E7%BB%8D.md @property介绍 相信做过iOS开发的同学都使用过@property,@property翻译过来是属性。在定义一个类...

壹峰
16分钟前
0
0
[springBoot系列]--springBoot注解大全

一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加......

Jack088
29分钟前
7
0
tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
51分钟前
5
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部