A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小臣 于 2013-5-16 20:57 编辑

   多线程在创建后他的运行还是很模糊,请朋友们详细解释下。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

7 个回复

倒序浏览
请大神来回答
回复 使用道具 举报
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最后的成果。
我们可以把这个项目分成几部分来做,每隔3天就给客户一部分,客户的心理会不会得到很大的安慰?
同时一个团队做一个项目,把项目分解给不同的人去做肯定比从头到尾顺着做有效率的多。
这个比喻,不知道是不是恰当,应该能帮助楼主理解一点
回复 使用道具 举报
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...

但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
回复 使用道具 举报
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...

但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
回复 使用道具 举报
王春晓 发表于 2013-5-15 18:36
举个形象的例子,客户的一个项目一个月可以完成,如果作为一个整体来做,客户要焦急的等待一个月才能见到最 ...

但是线程会随机的什么肖忙什么冻结 这都是什么说明什么呢? 你举的例子我明白 但是线程会有什么阻塞啥的。。。。纠结哦
回复 使用道具 举报
本帖最后由 翟宝海 于 2013-5-15 19:01 编辑

设计多线程的目的是为了提高CPU的利用率,一个程序在运行的过程中,并不是要一直占用CPU的;如果只有单线程,一个程序运行结束,在运行另外一个程序,就会造成资源(即CPU)的极大浪费;设计出多线程,就可以使多个程序轮流使用CPU,交替执行。
举个例子:我们平时网上聊天的时候,完全可以和多个朋友一起聊天,如果同时开五个QQ窗口,就可以理解为我们的大脑(CPU)开启了五个线程;
这五个聊天窗口之间就是交替穿插执行的:处理一个需要回复的窗口,再处理下一个等待回复的窗口,以此类推;
同时五个窗口之间也有执行优先权的不同,比如:亲人>亲密朋友>高中同学>小学同学>网友>,根据优先权决定五个窗口的先后回复次序;

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
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接口,因为几乎所有多线程都可以使用这种方式实现

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马