`
l4432848
  • 浏览: 255280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程高级.md

    博客分类:
  • java
阅读更多

例题,哲学家用餐:

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

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

分享到:
评论

相关推荐

    多线程训练营资料1.xls.md

    根据提供的文件信息,可以看出这份资料主要关注的是Java中与多线程相关的高级同步机制,特别是CAS(Compare and Swap)操作、自旋锁以及Unsafe类的使用。下面将详细阐述这些概念及其应用场景。 ### CAS (Compare ...

    多线程基础部分.md,学习代码

    在IT行业中,多线程是实现高...总结来说,多线程基础部分的学习涵盖了线程创建、线程状态、线程同步、ThreadLocal的使用以及并发编程的高级概念。通过深入理解这些内容,开发者可以编写出更加高效、稳定的多线程程序。

    2 线程同步机制.md,学习代码

    3. **Java并发包(java.util.concurrent)**:这个包提供了一系列高级线程控制工具,如`Semaphore`信号量、`CyclicBarrier`回环屏障、`CountDownLatch`计数器门锁、`ExecutorService`线程池以及`Future`和`Callable`...

    python-learning.zip

    13.进程和线程.md 14.网络编程入门和网络应用开发.md 15.图像和办公文档处理.md 16-20.Python语言进阶.md 21-30.Web前端概述.md 31-35.玩转Linux操作系统.md 36.关系型数据库和MySQL概述md 37.SQL详解md38深入MySQL....

    md格式编写的良心教程 Python 100天从新手到大师 共100个完整源文件 含课程源代码.rar

    Day66-75\73.Scrapy高级应用.md Day66-75\74.Scrapy分布式实现.md Day66-75\75.常见反爬策略及应对方案.md Day76-90\76.机器学习基础.md Day76-90\77.Pandas的应用.md Day76-90\78.NumPy和SciPy的应用.md Day76-90\...

    mysql高级.md

    ### MySQL高级知识点解析 #### 聚簇索引的理解与运用 在深入探讨聚簇索引之前,我们先明确一个核心概念:索引本质上是一种数据结构,它旨在提高数据库管理系统检索数据的速度。对于MySQL的InnoDB存储引擎而言,...

    Java很好的学习笔记4 无锁.md,学习代码

    在Java编程领域,无锁编程是一种高级的并发控制技术,旨在提高多线程环境下的程序性能和可伸缩性。本笔记将深入探讨无锁编程的概念、原理以及在Java中的实现方式。 首先,理解无锁编程的核心思想是关键。无锁编程,...

    MyBatis.md

    根据提供的文件信息,“MyBatis.md”文档主要探讨了MyBatis框架的源码实现及其与Spring框架集成时出现的一级缓存失效问题。本文将深入解析MyBatis的核心组件如Configuration、SqlSession等,并针对MyBatis与Spring...

    MySQL高级第四天.md

    ### MySQL 高级第四天知识点概览 #### 1. MySQL 常用工具 MySQL 提供了一系列实用工具来帮助用户进行数据库管理和维护工作。 - **mysqldump**: 这个客户端工具被广泛用于数据库的备份与数据迁移操作。通过它,...

    Java2023年最新高级面试题及答案,企业真面试题.md 免费下载,不需要积分

    Java2023年最新高级面试题及答案,企业真面试题.md 免费下载,不需要积分 **进程与线程的区别? 什么是TreeMap 如何停止一个正在运行的线程? Java 中,编写多线程程序的时候你会遵循哪些最佳实践? Java语言...

    Java高级之并发编程.md

    ### Java高级之并发编程 #### 1. Java 8 新特性 ##### 1.1 Lambda 表达式 Java 8 引入了一个新的语法结构:“->”操作符,它将 Lambda 表达式分为两个部分: - **左侧**:Lambda 表达式的参数列表。 - **右侧**...

    C语言文件操作、多线程编程和网络编程.md

    高级文件操作 - **5.1 顺序文件与随机文件** 顺序文件按照数据的存储顺序进行读写,适合于处理大量连续的数据。而随机文件则允许直接跳转到文件中的任何位置进行读写操作,适用于随机访问文件中的记录。 - **...

    面试:.md面试学习高级文件(个人整理)面试学习高级文件(个人整理)

    ### 进程、线程与协程的区别 在计算机科学领域中,进程、线程以及协程是非常重要的概念,它们都是实现并发编程的基础。本文将详细介绍这三个概念的区别及其应用场景。 #### 进程 进程是具有一定功能的程序在某个...

    JUC并发编程.md

    JUC(Java Util Concurrency)是Java标准库中的一个子包,提供了一系列高级并发工具类和接口,旨在简化多线程编程的复杂性。它包括了各种锁机制、线程池、信号量、屏障等实用组件,为开发人员提供了构建高性能并发...

    VueLearnNotes.rar

    - [12-组件化高级](./12-组件化高级/12-组件化高级.md) - [13-vue实例的生命周期](./13-vue实例的生命周期/13-vue实例的生命周期.md) - [14-前端模块化](./14-前端模块化/14-前端模块化.md) - [15-webpack](./15-...

    csdn_export_md.md

    ### JMeter知识点详解 #### 一、JMeter简介 ...当然,JMeter的功能远不止这些,随着实践的深入,您还可以探索更多高级特性,比如分布式测试、CSV数据集配置等功能,从而更好地满足复杂场景下的测试需求。

    分布式缓存Redis高级应用实战.md

    reidis介绍、为什么使用内存缓存数据库、Redis作为单线程模型为什么效率还这么高、Redis服务安装及常用命令解析、数据持久化、持久化化文件是如何恢复的、高可用主从搭建、故障转移哨兵模式、集群

    java复习文档,含.md程序

    2. **Executor框架**:Java 5引入了ExecutorService,它是ThreadPoolExecutor和ScheduledThreadPoolExecutor等高级线程池的基类。ExecutorService允许更灵活地管理和控制线程,比如设置最大线程数、处理任务队列等。...

    C语言高级编程技巧与数据结构.md

    ### C语言高级编程技巧与数据结构 #### 1. 函数指针与回调函数 - **1.1 函数指针的定义与使用** 函数指针是一种特殊类型的指针,它可以存储函数的地址,并且能够通过该指针来调用函数。这种特性使得在C语言中...

    MySQL高级第三天.md

    - 设置`thread_cache_size`,优化线程缓存大小,减少线程创建和销毁的开销。 - 配置`table_open_cache`,优化打开表缓存的数量,减少表打开次数。 #### 五、MySQL锁问题 锁是数据库管理系统中用来解决并发访问...

Global site tag (gtag.js) - Google Analytics