线程高级

author author     2022-09-07     538

关键词:

例题,哲学家用餐:

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

示意图: 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

java入门-高级教程-07.多线程

.../training/java-multi-threading.html更多教程:光束云-免费课程多线程序号文内章节视频1概述-2一个线程的生命周期-3线程的优先级-4创建一个线程-5通过实现Runnable接口来创建线程-6通过继承Thread来创建线程-7通过继承Thread来创建线程-8通... 查看详情

juc线程高级特性(代码片段)

...内存可见性  内存可见性(MemoryVisibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。  可见性错误是指当读操作与写操... 查看详情

jvm高级特性与实践(十三):线程实现与java线程调度(代码片段)

JVM高级特性与实践(一):Java内存区域与内存溢出异常JVM高级特性与实践(二):对象存活判定算法(引用)与回收JVM高级特性与实践(三):垃圾收集算法与垃圾收集器实现JVM高级特... 查看详情

unix高级编程之线程

线程 先有标准,后有实现 POSIX标准 pthread_xxxx();一、线程及标识 运行的函数 pthread_t---->不能打印 pthread_self(3); pthread_equal(3);psaxm-L二、线程的创建 pthread_create(3);三、线程的终止 <1>return <2>pthread_exit(); <3>被c 查看详情

java高级之多线程

1.1,多线程的作用:  *线程是程序执行的一条路径,一个进程中可以包含多条线程  *多线程并发执行可以提高程序的效率,可以同时完成多项工作1.2,多线程的应用场景:  *红蜘蛛同时共享屏幕给多个电脑   *迅雷开启多条... 查看详情

juc线程高级特性——线程池/线程调度/forkjoinpool(代码片段)

 13.线程池第四种获取线程的方法:线程池,一个ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用Executors工厂方法配置。线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可... 查看详情

《高级前端3.6》javascript多线程——concurrent.thread.js,webwork

...文链接:http://www.cnblogs.com/woodk/articles/5199536.htmlJavaScript多线程,在HTML5 WebWork没出现之前很多人都是用ConcurrentThread.js模拟多线程。 通常,我们也会用setInterval和setTimeout来模拟多线程。  多线程的概念介绍浏览器事... 查看详情

(黑马java多线程与并发库高级应用)01传统线程技术回顾

传统创建线程的两种方式packagecn.itcast.heima2;publicclassTraditionalThread{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubThreadthread=newThread(){@Overridepublicvoidrun(){while(true){try{Threa 查看详情

(黑马java多线程与并发库高级应用)04传统线程同步通信技术

子线程10次,然后主线程100次,然后子线程10次,然后主线程100次。循环50次packagecn.itcast.heima2;publicclassTraditionalThreadComunication{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubBusinessbusiness=newTradition 查看详情

线程高级

...个对象,这个类里有拿起、放下两个方法;当一个哲学家线程来调用拿起方法时,下一个哲学家线程就要进入 查看详情

flask高级编程-localstack线程隔离(代码片段)

30、LocalStack作为线程隔离对象的意义  30.1数据结构    限制了某些能力  30.2线程隔离#-*-coding=utf-8-*-importthreadingimporttimefromwerkzeug.localimportLocalStackmy_stack=LocalStack()my_stack.push(1)print(‘inmainthreadafterpush,v 查看详情

互联网架构多线程并发编程高级教程(下)

基础篇幅:线程基础知识、并发安全性、JDK锁相关知识、线程间的通讯机制、JDK提供的原子类、并发容器、线程池相关知识点 高级篇幅:ReentrantLock源码分析、对比两者源码,更加深入理解读写锁,JAVA内存模型、先行发生原... 查看详情

java高级-解析java中的多线程机制

线程的状态控制在这里需要明确的是:无论采用继承Thread类还是实现Runnable接口来实现应用程序的多线程能力,都需要在该类中定义用于完成实际功能的run方法,这个run方法称为线程体(ThreadBody)。按照线程体在计算机系统内存... 查看详情

java高级---多线程快速入门(代码片段)

...胃里的食物,二是藏在心中的梦想,三是读进大脑的书多线程快速入门1、线程与进程区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里... 查看详情

互联网架构多线程并发编程高级教程(上)(代码片段)

#基础篇幅:线程基础知识、并发安全性、JDK锁相关知识、线程间的通讯机制、JDK提供的原子类、并发容器、线程池相关知识点?#高级篇幅:ReentrantLock源码分析、对比两者源码,更加深入理解读写锁,JAVA内存模型、先行发生原则... 查看详情

线程学习--(十三)重写锁读写锁锁的高级深化

一、Concurrent.util常用类1.CountDownLacth使用:他经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作packagethread3;importjava.util.concurrent.CountDownLatch;publicclassUseCountDownLatch{publicstaticvoidmain(String[]args){finalC 查看详情

java高级特性第7节多线程

一、进程与线程的概念1.进程  进程是应用程序的执行实例,有独立的内存空间和系统资源。     如上图,标红色的是一个OfficeWord进程。  进程的特点:动态性:进程是动态的创建和消亡;并发性:操作系统利用时... 查看详情

线程高级.md

...个对象,这个类里有拿起、放下两个方法;当一个哲学家线程来调用拿起方法时,下一个哲学家线程就要进入等待状 查看详情