日期:2014-05-20  浏览次数:20614 次

多线程问题!!!求解
Java的多线是遵循时间片轮巡原则,即是某一时刻,只有一个线程在运行。
在此我想请问一下,如果是这样的话,多线程跟单线程有什么区别呢?
比如,要复制一个文件夹,文件夹里面有十万个文件。
按照某一时刻,只有一个线程运行的说法,那么多线程复制和单线程复制速度不是应该一样吗?
因为在某一时刻,其实还是只有一个线程运行而已啊,不是多个线程同时运行啊~~~~~

可是,我觉得是我没理解好吧!所以在此希望高手能给我个满意的回答!谢谢啊!(希望大虾们懂我问的意思吧)


------解决方案--------------------
探讨
Java的多线是遵循时间片轮巡原则,即是某一时刻,只有一个线程在运行。
在此我想请问一下,如果是这样的话,多线程跟单线程有什么区别呢?
比如,要复制一个文件夹,文件夹里面有十万个文件。
按照某一时刻,只有一个线程运行的说法,那么多线程复制和单线程复制速度不是应该一样吗?
因为在某一时刻,其实还是只有一个线程运行而已啊,不是多个线程同时运行啊~~~~~

可是,我觉得是我没理解好吧!所以……

------解决方案--------------------
多线程的程序可以更好的利用CPU资源,处理IO的线程会频繁进入等待状态,多线程的程序中CPU会把时间片多分配给其他线程,不至于整个进程都处于等待状态.
------解决方案--------------------
讲一个打印机打印的例子吧,假如一个程序有两项功能,听歌和打印。
如果单线程的话,要嘛先听歌,后打印(这种情况好像没什么问题)或者先打印,后听歌,这种就有可能出问题,因为打印机是很多人一起用,可能打印机上面有很多打印任务,需要排队,等你的打印任务全部完成之后,才能开始听歌。
但是如果是多线程,一个线程听歌,一个线程打印,CPU每个时间片段在打印任务排队时就跳过,去听歌,这样就不必等到打印任务完成时再去听歌了
------解决方案--------------------
讲一个打印机打印的例子吧,假如一个程序有两项功能,听歌和打印。
如果单线程的话,要嘛先听歌,后打印(这种情况好像没什么问题)或者先打印,后听歌,这种就有可能出问题,因为打印机是很多人一起用,可能打印机上面有很多打印任务,需要排队,等你的打印任务全部完成之后,才能开始听歌。
但是如果是多线程,一个线程听歌,一个线程打印,CPU每个时间片段在打印任务排队时就跳过,去听歌,这样就不必等到打印任务完成时再去听歌了