黑马程序员技术交流社区
标题:
请教关于多线程是怎么运行的步骤还不是很懂
[打印本页]
作者:
小臣
时间:
2013-5-15 18:11
标题:
请教关于多线程是怎么运行的步骤还不是很懂
本帖最后由 小臣 于 2013-5-16 20:57 编辑
多线程在创建后他的运行还是很模糊,请朋友们详细解释下。
作者:
袁梦希
时间:
2013-5-15 18:14
请大神来回答
作者:
王春晓
时间:
2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最后的成果。
我们可以把这个项目分成几部分来做,每隔3天就给客户一部分,客户的心理会不会得到很大的安慰?
同时一个团队做一个项目,把项目分解给不同的人去做肯定比从头到尾顺着做有效率的多。
这个比喻,不知道是不是恰当,应该能帮助楼主理解一点
作者:
小臣
时间:
2013-5-15 18:45
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...
但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
作者:
小臣
时间:
2013-5-15 18:45
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...
但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
作者:
小臣
时间:
2013-5-15 18:46
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...
但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
作者:
翟宝海
时间:
2013-5-15 18:59
本帖最后由 翟宝海 于 2013-5-15 19:01 编辑
设计多线程的目的是为了提高CPU的利用率,一个程序在运行的过程中,并不是要一直占用CPU的;如果只有单线程,一个程序运行结束,在运行另外一个程序,就会造成资源(即CPU)的极大浪费;设计出多线程,就可以使多个程序轮流使用CPU,交替执行。
举个例子:我们平时网上聊天的时候,完全可以和多个朋友一起聊天,如果同时开五个QQ窗口,就可以理解为我们的大脑(CPU)开启了五个线程;
这五个聊天窗口之间就是交替穿插执行的:处理一个需要回复的窗口,再处理下一个等待回复的窗口,以此类推;
同时五个窗口之间也有执行优先权的不同,比如:亲人>亲密朋友>高中同学>小学同学>网友>,根据优先权决定五个窗口的先后回复次序;
作者:
ミ后来我经过梵
时间:
2013-5-15 19:23
1、进程和线程:
进程:正在进行的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
线程:进程内部的一条执行路径或者一个控制单元。
两者的区别:
一个进程至少有一个线程
进程在执行过程中拥有独立的内存单元,而多个线程共享内存;
2、jvm多线程的启动是多线程吗?
java的虚拟机jvm启动的是单线程,就有发生内存泄露的可能,而我们使用java程序没出现这样的问题,
也就是jvm启动至少有两个线程,一个执行java程序,一个执行垃圾回收。所以是多线程。
2、多线程的优势:
解决了多部分同时运行的问题,提高效率
3、线程的弊端:
线程太多会导致效率的降低,因为线程的执行依靠的是CPU的来回切换。
4、什么叫多线程:
一个进程中有多个线程,称为多线程。
5、实现多线程的方法:
实现多线程可以通过继承Thread类和实现Runnable接口。
(1)继承Thread
定义一个类继承Thread类
复写Thread类中的public void run()方法,将线程的任务代码封装到run方法中
直接创建Thread的子类对象,创建线程
调用start()方法,开启线程(调用线程的任务run方法)
//另外可以通过Thread的getName()获取线程的名称。
(2)实现Runnable接口;
定义一个类,实现Runnable接口;
覆盖接口的public void run()的方法,将线程的任务代码封装到run方法中;
创建Runnable接口的子类对象
将Runnabl接口的子类对象作为参数传递给Thread类的构造函数,创建Thread类对象
(原因:线程的任务都封装在Runnable接口子类对象的run方法中。
所以要在线程对象创建时就必须明确要运行的任务)。
调用start()方法,启动线程。
两种方法区别:
(1)实现Runnable接口避免了单继承的局限性
(2)继承Thread类线程代码存放在Thread子类的run方法中
实现Runnable接口线程代码存放在接口的子类的run方法中;
在定义线程时,建议使用实现Runnable接口,因为几乎所有多线程都可以使用这种方式实现
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2