知识大全 制作多个线程

Posted

篇首语:实践是知识的母亲,知识是生活的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 制作多个线程相关的知识,希望对你有一定的参考价值。

  现在考虑一下创建多个不同的线程的问题 我们不可用前面的例子来做到这一点 所以必须倒退回去 利用从Thread继承的多个独立类来封装run() 但这是一种更常规的方案 而且更易理解 所以尽管前例揭示了我们经常都能看到的编码样式 但并不推荐在大多数情况下都那样做 因为它只是稍微复杂一些 而且灵活性稍低一些   下面这个例子用计数器和切换按钮再现了前面的编码样式 但这一次 一个特定计数器的所有信息(按钮和文本字段)都位于它自己的 从Thread继承的对象内 Ticker中的所有字段都具有private(私有)属性 这意味着Ticker的具体实现方案可根据实际情况任意修改 其中包括修改用于获取和显示信息的数据组件的数量及类型 创建好一个Ticker对象以后 构建器便请求一个AWT容器(Container)的句柄——Ticker用自己的可视组件填充那个容器 采用这种方式 以后一旦改变了可视组件 使用Ticker的代码便不需要另行修改一道   //: Counter java  // If you separate your thread from the main  // class you can have as many threads as you  // want   import java awt *;  import java awt event *;  import java applet *;  class Ticker extends Thread    private Button b = new Button( Toggle );   private TextField t = new TextField( );   private int count = ;   private boolean runFlag = true;   public Ticker(Container c)    b addActionListener(new ToggleL());   Panel p = new Panel();   p add(t);   p add(b);   c add(p);      class ToggleL implements ActionListener    public void actionPerformed(ActionEvent e)    runFlag = !runFlag;         public void run()    while (true)    if(runFlag)   t setText(Integer toString(count++));   try    sleep( );   catch (InterruptedException e)          public class Counter extends Applet    private Button start = new Button( Start );   private boolean started = false;   private Ticker[] s;   private boolean isApplet = true;   private int size;   public void init()    // Get parameter size from Web page:   if(isApplet)   size =    Integer parseInt(getParameter( size ));   s = new Ticker[size];   for(int i = ; i < s.length; i++)   s[i] = new Ticker(this);   start.addActionListener(new StartL());   add(start);      class StartL implements ActionListener    public void actionPerformed(ActionEvent e)    if(!started)    started = true;   for(int i = 0; i < s.length; i++)   s[i].start();            public static void main(String[] args)    Counter4 applet = new Counter4();   // This isn\'t an applet, so set the flag and   // produce the parameter values from args:   applet.isApplet = false;   applet.size =    (args.length == 0 ? 5 :   Integer.parseInt(args[0]));   Frame aFrame = new Frame("Counter4");   aFrame.addWindowListener(   new WindowAdapter()    public void windowClosing(WindowEvent e)    System.exit(0);      );   aFrame.add(applet, BorderLayout.CENTER);   aFrame.setSize(200, applet.size * 50);   applet.init();   applet.start();   aFrame.setVisible(true);       Ticker不仅包括了自己的线程处理机制,也提供了控制与显示线程的工具。Tw.WinGWIt.可按自己的意愿创建任意数量的线程,毋需明确地创建窗口化组件。  在Counter4中,有一个名为s的Ticker对象的数组。为获得最大的灵活性,这个数组的长度是用程序片参数接触Web页而初始化的。下面是网页中长度参数大致的样子,它们嵌于对程序片(applet)的描述内容中:        其中,param,name和value是所有Web页都适用的关键字。name是指程序中对参数的一种引用称谓,value可以是任何字串(并不仅仅是解析成一个数字的东西)。  我们注意到对数组s长度的判断是在init()内部完成的,它没有作为s的内嵌定义的一部分提供。换言之,不可将下述代码作为类定义的一部分使用(应该位于任何方法的外部):  inst size = Integer.parseInt(getParameter("Size"));  Ticker[] s = new Ticker[size]  可把它编译出来,但会在运行期得到一个空指针违例。但若将getParameter()初始化移入init(),则可正常工作。程序片框架会进行必要的启动工作,以便在进入init()前收集好一些参数。  此外,上述代码被同时设置成一个程序片和一个应用(程序)。在它是应用程序的情况下,size参数可从命令行里提取出来(否则就提供一个默认的值)。  数组的长度建好以后,就可以创建新的Ticker对象;作为Ticker构建器的一部分,用于每个Ticker的按钮和文本字段就会加入程序片。  按下Start按钮后,会在整个Ticker数组里遍历,并为每个Ticker调用start()。记住,start()会进行必要的线程初始化工作,然后为那个线程调用run()。  ToggleL监视器只是简单地切换Ticker中的标记,一旦对应线程以后需要修改这个标记,它会作出相应的反应。  这个例子的一个好处是它使我们能够方便地创建由单独子任务构成的大型集合,并以监视它们的行为。在这种情况下,我们会发现随着子任务数量的增多,机器显示出来的数字可能会出现更大的分歧,这是由于为线程提供服务的方式造成的。  亦可试着体验一下sleep(100)在Ticker.run()中的重要作用。若删除sleep(),那么在按下一个切换按钮前,情况仍然会进展良好。按下按钮以后,那个特定的线程就会出现一个失败的runFlag,而且run()会深深地陷入一个无限循环——很难在多任务处理期间中止退出。因此,程序对用户操作的反应灵敏度会大幅度降低。 cha138/Article/program/Java/gj/201311/27269

相关参考

知识大全 多线程对多个客户端的监听

  这是一个比较简单的例子来说明socket编程服务器端使用了多线程来监听客户端  服务器端的代码  packageSocketTest;  importjavaio*;  import*;  imp

知识大全 解析php多线程下载远程多个文件

functionremote($urls$name=$path=$dir=/images/)if(!is_array($urls)orcount($urls)==)returnfalse;dmkdir

知识大全 任务列表分派给多个线程的策略和方法

  多线程下载由来已久如FlashGetNetAnts等工具它们都是依懒于HTTP协议的支持(Range字段指定请求内容范围)首先能读取出请求内容(即欲下载的文件)的大小划分出若干区块把区块分段分发给

知识大全 java多线程中synchronized关键字的用法

  由于同一进程内的多个线程共享内存空间在Java中就是共享实例当多个线程试图同时修改某个实例的内容时就会造成冲突因此线程必须实现共享互斥使多线程同步  最简单的同步是将一个方法标记为synchron

知识大全 多线程

  在计算机编程中一个基本的概念就是同时对多个任务加以控制许多程序设计问题都要求程序能够停下手头的工作改为处理其他一些问题再返回主进程可以通过多种途径达到这个目的最开始的时候那些拥有机器低级知识的程序

知识大全 Java多线程下载

Java多线程下载  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  同时下载多个文件不过单文件没有

知识大全 用java多线程断点续传实践

  /**  *authorannegu  *date  */  annegu做了一个简单的Http多线程的下载程序来讨论一下多线程并发下载以及断点续传的问题  这个程序的功能就是可以分多个线程从目标

知识大全 强大的多线程和倒计时程序

  多线程技术是非常实用的技术特别是碰到有关运行多个任务的程序就只有多线程才能满足你的要求在以下程序中我所展示的是一个倒计时程序及利用Callable接口(不是Runnable接口)来返回一个你所要求

知识大全 如何制作初中数学学习计划

如何制作初中数学学习计划计划要考虑全面:学习计划不是除了学习,还是学习。学习有时,休憩有时,娱乐也有时,所有这些都要考虑到计划中。计划要兼顾多个方面,学习时不能废寝忘食,这对身体不好,这样的计划也是不

淡水鱼有哪些主要品种和制作方法?

淡水鱼长期供应鲤鱼、鱿鱼、鲫鱼及桂花鱼、鲈鱼等十多个活鲜鱼类。淡水鱼一般都可清蒸,还可红烧,亦可根据自己的口味及鱼类的特点自由制作。