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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看晕了。。。。。。。。。。。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!欢迎继续来论坛学习~

查看全部评分

4 个回复

正序浏览
一般以下场合需要使用多线程:
1、 程序包含复杂的计算任务时
主要是利用多线程获取更多的CPU时间(资源)。
2、 处理速度较慢的外围设备
比如:打印时。再比如网络程序,涉及数据包的收发,时间因素不定。使用独立的线程处理这些任务,可使程序无需专门等待结果。
3、 程序设计自身的需要
WINDOWS系统是基于消息循环的抢占式多任务系统,为使消息循环系统不至于阻塞,程序需要多个线程的来共同完成某些任务。
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
  什么是多线程?
  多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
  使用线程的好处有以下几点:
  ·使用线程可以把占据长时间的程序中的任务放到后台去处理
  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
  ·程序的运行速度可能加快
  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
  还有其他很多使用多线程的好处,这里就不一一说明了。
  一些线程模型的背景
  我们可以重点讨论一下在Win32环境中常用的一些模型。
  ·单线程模型
  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。
  ·块线程模型(单线程多块模型STA)
  这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。
  ·多线程块模型(自由线程块模型)
  多线程块模型(MTA)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和STA的执行速度都要块,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
例如:火车票的售票窗口
      一共有100张票,使用4个窗口进行售票,这时就要开启4个线程进行售票。
代码如下:

class Tickt implements Runnable//extends Thread
{
        private int tick = 100;
        public void run()
        {
                while(true)
                {
                        if(tick>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"卖票:"+tick--);
                                //"卖票:"+tick--    等于   tick,tick--   
                        }
                }
        }
}
public class _11多线程_售票 {
       
        public static void main(String[]args)
        {
                Tickt t = new Tickt();
                Thread t1 = new Thread(t);//创建了一个线程
                Thread t2 = new Thread(t);
                Thread t3 = new Thread(t);
                Thread t4 = new Thread(t);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }

}
希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报
线程我们是一直使用的,在编译的时候至少就会启动俩个线程哦!!多线程才是要看使用情况的!!一个线程只能按顺序的干一件事,多线程却可以几个人一起来,这样不是效率很高??!!!就比如你吃饭,你说是你一个人吃的快还是你三个人一起吃的快呢?
   我们玩的游戏好多也是多线程的啊,你玩游戏,游戏得一边给你加载地图场景,一边让人物行走,你可以一边聊天。。。等等,可以同时做好多事情,要是一件一件来这游戏你觉得你还玩的下去吗?
   就拿我们自己来说好了,走路你得一边看着路一边走吧,这就是多线程喽,不能看半天,走一步吧,这走会不得累死啊。
  多线程就是用来提高效率的,Java支持线程的并发执行,效率提高不是一点半点呢!!!
回复 使用道具 举报
为了提高效率!  可以让程序中多个用户并发操作。我也正在复习这部分,符我笔记连接互相学习http://note.youdao.com/share/?id=d55fac964c66b1645b2e1c9bb2ababa5&type=note
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马