对于java程序员来说,仅仅掌握java多线程的基本实现是不太够的。小编编写了一个实例, 1、双重定时器的实现案例(要求:使用定时器,间隔4秒执行一次,再间隔两秒执行一次,以此类推执行!)代码及运行效果图如下: 双重定时器实现代码图 双重定时器运行效果图 2、线程互斥和同步 在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在急用临界资源时,如多个线程急用同一台打印机,会使打印结果打印在一起,难以区分。当多个线程急用共享变量、表格、链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各个线程之间能够有效的共享资源和相互合作,从而使程序执行具有可再现性。当线程并发执行时,由于共享资源和线程协作,使得线程之间存在以下两种制约关系:
间接相互制约可以称为互斥;直接相互制约可以称为同步。对于互斥可以这样理解,线程A和线程B互斥访问某个资源,则它们之间就会产生顺序问题-要么线程A等待线程B操作完毕,要么线程B等待线程A操作完毕,这其实就是线程的同步了,因此同步包括了互斥,互斥其实是一种特殊的同步。 下面通过一个面试题来体会线程的交互。要求:子线程运行执行10次后,主线程再执行5次,这样交替执行三遍。源码如下图: 互斥和同步案例源码图 互斥和同步代码运行效果图 |
|