微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

多线程问题!!!求解

时间:2016-12-24 03:23  浏览:努力统计中...
Java的多线是遵循时间片轮巡原则,即是某一时刻,只有一个线程在运行。 在此我想请问一下,如果是这样的话,多线程跟单线程有什么区别呢? 比如,要复制一个文件夹,文件夹里面
Java的多线是遵循时间片轮巡原则,即是某一时刻,只有一个线程在运行。
在此我想请问一下,如果是这样的话,多线程跟单线程有什么区别呢?
比如,要复制一个文件夹,文件夹里面有十万个文件。
因为在某一时刻,其实还是只有一个线程运行而已啊,不是多个线程同时运行啊~~~~~

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



每一个线程的执行都不是一直在占用CPU,当CPU空闲时,可以执行另一个线程来执行任务。这样可以节省时间.


多线程对多文件处理进行处理时,处理一些不怎么耗CPU的逻辑时,那么第二个线程启动,处理任务。
讲一个打印机打印的例子吧,假如一个程序有两项功能,听歌和打印。


多线程的程序可以更好的利用CPU资源,处理IO的线程会频繁进入等待状态,多线程的程序中CPU会把时间片多分配给其他线程,不至于整个进程都处于等待状态.


讲一个打印机打印的例子吧,假如一个程序有两项功能,听歌和打印。
如果单线程的话,要嘛先听歌,后打印(这种情况好像没什么问题)或者先打印,后听歌,这种就有可能出问题,因为打印机是很多人一起用,可能打印机上面有很多打印任务,需要排队,等你的打印任务全部完成之后,才能开始听歌。
但是如果是多线程,一个线程听歌,一个线程打印,CPU每个时间片段在打印任务排队时就跳过,去听歌,这样就不必等到打印任务完成时再去听歌了

讲一个打印机打印的例子吧,假如一个程序有两项功能,听歌和打印。
如果单线程的话,要嘛先听歌,后打印(这种情况好像没什么问题)或者先打印,后听歌,这种就有可能出问题,因为打印机是很多人一起用,可能打印机上面有很多打印任务,需要排队,等你的打印任务全部完成之后,才能开始听歌。
但是如果是多线程,一个线程听歌,一个线程打印,CPU每个时间片段在打印任务排队时就跳过,去听歌,这样就不必等到打印任务完成时再去听歌了


如果单线程的话,要嘛先听歌,后打印(这种情况好像没什么问题)或者先打印,后听歌,这种就有可能出问题,因为打印机是很多人一起用,可能打印机上面有很多打印任务,需要排队,等你的打印任务全部完成之后,才能开始听歌。
但是如果是多线程,一个线程听歌,一个线程打印,CPU每个时间片段在打印任务排队时就跳过,去听歌,这样就不必等到打印任务完成时再去听歌了

看你实际需要了,同时处理不同的业务,用处就体现出来了

举个例子:
  银行有业务窗口,我们把有一个窗口的叫做单线程模式,有两个以上业务窗口的叫做多线程模式,虽然某一时刻只有一个线程在执行,但是cpu处理问题很强大,所以当多个线程分享cpu资源提高了cpu利用率,望楼主能够理解


对于计算密集型的任务,线程数多余CPU数,只会降低效率
cpu调度问题,比如有两个任务,第一个任务要很长时间,第二个任务很短,而第二个任务急需处理,单线程的话就麻烦啦!

对于IO密集型的任务,大多时间都是处理IO去了,CPU是空闲的,这时候多线程就有用武之地

如楼主说的多线程复制多个文件,这可能会造成IO瓶颈,也会导致效率不高

#1 floor is right

多线程用于处理多任务,比如你写一个服务器,你如果用主线程进行端口监听的话,在没有接受到请求的时候就会阻碍主线程的运行,也就是说你在连接成功之前你什么也做不了,所以要在主线程中创建另一个线程去监听端口,当有很多客户端有请求时你就要为每一个客户分配一个线程去处理不同的请求


假设银行只有一个柜台 如果这个窗口只给一个人处理业务 就是单线程 如果同时给多个人处理业务就是多线程 但是在给多个人处理任务的过程中在某一个时间片段他只能给一个人处理业务 多个窗口同时处理业务也就是我们的四核八核电脑


按照某一时刻,只有一个线程运行的说法,那么多线程复制和单线程复制速度不是应该一样吗?
多线程主要就是解决线程堵塞问题。而却现在大部分电脑的cpu都是多核心的,可以同时执行多个线程。也就是多线程也可以提升性能。

嗯,很好,比之前理解清晰了。谢谢各位的帮忙。

如果任何线程都能保证没有阻塞情况出现的话,那么单线程和多线程几乎是一样的。
但是实际不可能~
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------