线程高级.md

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程高级.md相关的知识,希望对你有一定的参考价值。

例题,哲学家用餐:

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

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

代码示例:

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

代码示例:

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

代码示例:

技术分享

运行结果:

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

代码示例:

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

代码示例:

技术分享

运行结果:

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

代码示例:

技术分享


以上是关于线程高级.md的主要内容,如果未能解决你的问题,请参考以下文章

Python-多线程.md

可以安全地重用 MD5CryptoServiceProvider 来计算多线程代码中的 md5 哈希吗?

#导入MD文档图片#JMeter-多线程组间通信

python高级之多线程

俩句话理解VS的MT/MD和MTD/MDD。

线程高级操作