黑马程序员技术交流社区

标题: 单线程与多线程的区别? [打印本页]

作者: 蛋壳    时间: 2014-1-13 01:55
标题: 单线程与多线程的区别?
单线程与多线程的区别有哪些呢
作者: 贺利英    时间: 2014-1-13 09:20
在内存中是有区别的,单线程的话内存中会一直执行这个程序,一直执行完,而多线程,在内存中是交替执行的,利用唤醒等待机制来交替的获得执行权来进行交替执行的。
class Test extends Thread     
{

        public void run()
        {
                for(int x=0;x<100;x++)

                        System.out.println(name+"////"+x);

        }
        private String name;

        Test(String name)
        {
                this.name=name;

        }
}

class ThreadDemo
{
        public static void main(String[] args)
        {
                Test t1=new Test("one");  //创建一个线程
                Test t2=new Test("two");  //创建另一个线程
                t1.start();               //调用run方法并进行启动线程
                t2.start();
                for (int y=0;y<100;y++ )
                {
                        System.out.println("Hello World!");
                }
               
        }
}
这样的一个程序里有三个线程,线程t1,t2,main这三个线程,运行的结果是三个线程交替运行的。
作者: 沈可    时间: 2014-1-13 13:54
单线程:一个任务中只有一个线程,几个账户(发送邮箱)排队循环发送。多线程:一个任务可以有几个线程,  就是  "  最大限度地利用  CPU  资源  ",  当某一线程的处理不需要占用  CPU  而只和  I/O,OEMBIOS  等资源打交道时  ,  让需要占用  CPU  资源的其它线程有机会获得  CPU  资源。
作者: 师弟    时间: 2014-1-13 14:49
单线程就像是一个在做事情,而多线程是多个人一起来做
作者: 一席倾城    时间: 2014-1-14 18:23
在抢占式多任务系统中,使用多线程可能得到更快的响应,竞争CPU的基本单位是线程,而你的程序使用多线程后CPU处理你的程序机会变多,而且使用多线程可以把一些运算量很大和异步等待的操作单独放到一个线程中,这样使你的程序仍然可以响应其它操作


但是线程多了也会出问题:比如写游戏,一开始想来,用多线程蛮好的, 一个敌人一个线程让他自己单独运行,可以增加灵活性和随机性还有速度会快些? 其实不然, 一方面线程多了 速度会变得很慢, 另一方面由于线程切换和执行的不确定性,会使结果变得乱七八糟,跳来跳去的感觉?,特别是一些碰撞判断时,会莫名其妙?
作者: loveywj    时间: 2014-1-14 18:26
这样来说吧,假如你开了一家杂货店。就你一个人带着2岁的娃儿在那里经营。一个顾客来买酱油。你现在要去给他拿酱油赛,正在这个时候你的小孩子又要吵到要niao niao !现在的你肯定就只能做一样赛。不能同时给拿酱油又去给你的小孩子提niao niao 赛。假如,是你和你的媳妇儿一起在店里。那么有客人来了,你给客人拿东西,你媳妇儿给小孩儿~~~~。这个就可以同时进行了。

现在把这个用程序来实现:
弄一个界面上面放两按钮 分别写单线程和多线程。

在单线程的单击事件里放代码来执行下面的for循环
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             for (int i = 0; i < 999999999; i++)
  4.             {
  5.             }
  6.             MessageBox.Show("执行完成~~~~~~~");
  7.         }
复制代码


在执行的时候,你会发现你是无法对这个界面进行操作的。会感觉卡死一样,其实正在执行循环。


下面对多线程来操作:
先引入System.Threading 命名空间

把上面的循环写成一个方法
再  ~~~~
如下图


这样,当你点多线程按钮时,你还可以对界面来拖动等等操作


作者: 矫情    时间: 2014-1-14 19:11
单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
多线程运行就是一个进程内有多个相对独立的并且实现特定的任务以竞争CPU的方式执行,在多处理机条件下宏观上是并发,实际上是分时执行,只是执行的时间片较短。
作者: 未烧开的白开水    时间: 2014-2-11 14:29
个人理解

单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。

多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息 花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。 而如果用多线程就可以在等待期间 加入其他的搜索,然后等待,这样可以提高效率。

不过多线程和多进程公用一些资源时要考虑的问题好像也是一样的,,对于一些公共资源或者公共变量的访问和修改时要注意特别的, 需要一些锁定什么的,还有顺序问题的考虑。

比如写游戏,一开始想来,用多线程蛮好的, 一个敌人一个线程让他自己单独运行,可以增加灵活性和随机性还有速度会快些? 其实不然, 一方面线程多了 速度会变得很慢, 另一方面由于线程切换和执行的不确定性,会使结果变得乱七八糟,跳来跳去的感觉?,特别是一些碰撞判断时,会莫名其妙?
(我没试过,以前听人说试过) 。 其实处理这些东西用一个流程下来顺次处理主角、敌人、碰撞判断、绘图,速度方面不会怎么慢,而且一些变量判断方面不会错位。

说了半天,也没具体说出些什么,不好意思。


如果你学过操作系统,应该用好理解一点,线程的同步问题呵呵。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2