分享

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

 太极混元天尊 2018-06-12

对于java程序员来说,仅仅掌握java多线程的基本实现是不太够的。小编编写了一个实例,

1、双重定时器的实现案例(要求:使用定时器,间隔4秒执行一次,再间隔两秒执行一次,以此类推执行!)代码及运行效果图如下:

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

双重定时器实现代码图

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

双重定时器运行效果图

2、线程互斥和同步

在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在急用临界资源时,如多个线程急用同一台打印机,会使打印结果打印在一起,难以区分。当多个线程急用共享变量、表格、链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各个线程之间能够有效的共享资源和相互合作,从而使程序执行具有可再现性。当线程并发执行时,由于共享资源和线程协作,使得线程之间存在以下两种制约关系:

  1. 间接相互制约。一个系统中的多个线程必然要共享某种系统资源,如共享CPU,共享I/O设备,所谓间接相互制约即源于这种资源共享,打印机就是最好的例子,线程A使用打印机时,其他线程都要等待。
  2. 直接相互制约。这种制约主要是线程之间的合作,如有线程A将计算机供给线程B作进一步处理,那么线程B在线程A将数据送达之前都将处于阻塞状态。

间接相互制约可以称为互斥;直接相互制约可以称为同步。对于互斥可以这样理解,线程A和线程B互斥访问某个资源,则它们之间就会产生顺序问题-要么线程A等待线程B操作完毕,要么线程B等待线程A操作完毕,这其实就是线程的同步了,因此同步包括了互斥,互斥其实是一种特殊的同步。

下面通过一个面试题来体会线程的交互。要求:子线程运行执行10次后,主线程再执行5次,这样交替执行三遍。源码如下图:

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

互斥和同步案例源码图

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

互斥和同步代码运行效果图

「javaSE基础」2018面试-多线程及并发库-实现双重定时器案例等

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多