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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© redlong 中级黑马   /  2014-4-3 23:23  /  1300 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 redlong 于 2014-4-5 23:22 编辑

多线程的概念,一般在什么时候用到。最好能贴出代码。

评分

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

查看全部评分

2 个回复

倒序浏览
本帖最后由 阳春烟景 于 2014-4-3 23:35 编辑

这是我以前的笔记:


多线程:台湾惯用术语为作多执行绪,港澳惯用术语为作多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个执行绪,进而提升整体处理性能。
/*
需求:简单的卖票程序。
多个窗口同时买票。

创建线程的第二种方式:实现Runable接口

步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
        将线程要运行的代码存放在该run方法中。

3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
        为什么要将Runnable接口的子类对象传递给Thread的构造函数。
        因为,自定义的run方法所属的对象是Runnable接口的子类对象。
        所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。

5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

实现方式和继承方式有什么区别呢?

实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。

两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。

代码:

  1. class Ticket implements Runnable//extends Thread
  2. {
  3.         private  int tick = 100;
  4.         public void run()
  5.         {
  6.                 while(true)
  7.                 {
  8.                         if(tick>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
  11.                         }
  12.                 }
  13.         }
  14. }


  15. class  TicketDemo
  16. {
  17.         public static void main(String[] args)
  18.         {

  19.                 Ticket t = new Ticket();

  20.                 Thread t1 = new Thread(t);//创建了一个线程;
  21.                 Thread t2 = new Thread(t);//创建了一个线程;
  22.                 Thread t3 = new Thread(t);//创建了一个线程;
  23.                 Thread t4 = new Thread(t);//创建了一个线程;
  24.                 t1.start();
  25.                 t2.start();
  26.                 t3.start();
  27.                 t4.start();


  28.                 /*
  29.                 Ticket t1 = new Ticket();
  30.                 //Ticket t2 = new Ticket();
  31.                 //Ticket t3 = new Ticket();
  32.                 //Ticket t4 = new Ticket();

  33.                 t1.start();
  34.                 t1.start();
  35.                 t1.start();
  36.                 t1.start();
  37.                 */

  38.         }
  39. }
复制代码





回复 使用道具 举报
我们用多线程来开发程序,目的就是减少处理器单元的闲置时间,增加处理器单元的操作能力.但这并不能说明在程序中可以泛用多线程,应用不当,会降低系统的性能.例如:如果完成一个作业需要的时间为N,在多线程的情况下,创建线程需要的时间为N0,线程中处理的作业需要的时间为N1,线程销毁需要的时间是N3,还有一些其它的时间这里就不算了,这里可以看出如果作业流程简单的,占用资源和时间不长的则不需要利用一个线程来处理,如果一个作业需要不停的创建线程则需要利用到线程池,从而提高程序的性能.

   需要多线程作业,需要添加System.Threading命名空间,下面细说一个Thread的操作:

通过Thread一次使用一个线程,来创建和删除线程.
创建线程:
Thread th = new Thread(new ThreadStart(Method));
开始线程:
th.Start();
销毁线程:
th.Abort();
线程名称:
th.Name="A";
线程休眠:
th.Sleep();
线程挂起:
th.Suspend();
线程恢复:
th.Resume();
说到Thread还有一个方法就是设置后台线程
IsBackground属性设为true,该线程即为后台线程。
后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,
CLR将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。注意:后台线程不能直接操作所在进程之外的数据引用。

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