养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

如何应对软件项目的投标答辩

时间:2024-10-21 19:05:22

了解sleep方法在线程同步中的具体应用场景

方法/步骤

1、sleep方法是Thread类的一个静态方法,该方法可以把当前正在运行的线程挂起一段时间(时间值由参数传入),挂起时间到期后,JVM会在适当的时间再次唤醒该线程。先看一个例子代码:

如何应对软件项目的投标答辩

2、MyRunner类代码:

如何应对软件项目的投标答辩

3、在SleepDemo类主线程中,启动子线程后,应用Thread类的sleep方法将主线程挂起1000毫秒,因为sleep方法抛出InterruptedException异常,因此调用sleep方法时,需要包含在try-cahtch语句,用于捕获sleep方法可能抛出的异常;在MyRunner类子线程中,每次循环都会调用Thread类的sleep方法将子线程挂起500毫秒,然后再继续执行。程序输出结果如下图所示:

如何应对软件项目的投标答辩

4、从输出结果可以看出,主线程在子帧霭绎郎线程执行之前就被挂起,也验证了线程调用start方法后,JVM并没有直接启动子线程,而是在主线程执行完后再执行子线程的。子线程在执行过程中,每次循环都会等待0.5谥貘揉蹿秒后再继续执行。上面的例子代码让我们了解了sleep的具体用法,那么sleep方法的具体应用场景是什么?实际应用编程中,在什么情况下需要使用sleep方法呢?考虑一个编程任务。要求模拟一个服务器端文档上传服务程序,10个用户并发上传不同格式的文档,该服务程序需要启动一个转换线程把用户上传的文档统一转换为PDF文档,转换完成后,需要将该文档存储路径设置到文档对象中,并输出该文档信息。另外,模拟程序不需要处理实际的文档,模拟处理过程即可。既然是服务器端处理程序,需要采用多线程处理,对每个用户的上传请求创建一个线程A,在线程A中,考虑到文档格式转换操作时间较长,需要创建一个转换文档格式的线程B。程序处理框架如下图所示:

如何应对软件项目的投标答辩

5、用户发出上传文档请求,主服务线程接收到请求后,创建一个处理该文档的A线程,A线程启咿蛙匆盗动后,创建一个文档转换线程B,B线程负责文档格式的转换工作,A线程需要等待B线程完成文档转换工作罨傺烙窑后,存储并输出文档信息。上述过程涉及到A线程和B线程的同步,A线程创建B线程后,需要等待B线程完成工作,才能继续执行。此时,A线程就可以调用sleep方法休眠一段时间,等待B线程完成工作。首先建立Document类,该类有两个属性,分别是docName、savePath,savePath属性值的设置在B线程进行。代码如下:

如何应对软件项目的投标答辩

6、建立文档转换线程类(B线程),该类通过for循环模拟长时间处理操作,并设置传入doc对象的savePath属性,表示文档转换完成。代码如下:

如何应对软件项目的投标答辩

7、建立请求处理线程类(A线程),该类启动文档转换线程,并调用sleep方法自身休眠1000毫秒,等待文档转换工作的完成。

如何应对软件项目的投标答辩

8、建立主线程类,该类首先初始化文档列表,然后启动线程对每个文档进行处理。

如何应对软件项目的投标答辩

9、程序输出结果如下图所示:

如何应对软件项目的投标答辩

© 一点知识