java的多线程机制内容摘要:

{ int i =1。 public void run() { while (i50) { (i++)。 } } } 6 Java的多线程机制 30 建立线程 线程控制 (虚拟 CPU) 线程代码 被操作数据 Thread的实例 (t1) 由实现了 Runnable接口 的类 (Job1)提供 —run方法 实现 Runnable接口的类 (Job1)的实例 ( j ) 6 Java的多线程机制 31 生成与运行线程 –方法 2 class MyRun implements Runnable { public void run() {线程体 …} } MyRun mr = new MyRun()。 Thread t1 = new Thread(mr)。 ()。 //Thread实例用于线程控制 适合于:定义 run()方法的类必须是其他类或其他类的子类。 6 Java的多线程机制 32 方法之二: Runnable( 续 ) 两种方法的选择 –当需要从其他类,如 Applet类继承时,使用Runnable接口 –当编写简单的程序时,可考虑使用继承Thread类 例: –具体运行结果(线程调度)与平台有关 6 Java的多线程机制 33 public class Runner extends Thread { //赛跑者线程类 public int tick = 1。 public void run() { while (tick 40000000) tick++。 } } // //RaceApplet是一个实现了多线程的 Applet public class RaceApplet extends Applet implements Runnable { final static int NUMRUNNERS = 2。 //定义赛跑线程的个数 final static int SPACING = 20。 //声明两个赛跑线程 Runner[] runners = new Runner[NUMRUNNERS]。 //声明一个画图线程 Thread updateThread = null。 6 Java的多线程机制 34 public void init() { //重载 Applet的 init()方法 for (int i = 0。 i NUMRUNNERS。 i++) { runners[i] = new Runner()。 //创建赛跑线程线程 runners[i].setPriority(i+1)。 //设优先级 first=1,second=2 } if (updateThread == null) { //创建绘图线程,并设 优先级为 3 updateThread = new Thread(this, Thread Race)。 (NUMRUNNERS+1)。 } addMouseListener(new MyAdapter())。 //注册事件监听者 } //end of init() 6 Java的多线程机制 35 // 内部事件监听者类,监听鼠标事件 class MyAdapter extends MouseAdapter { //鼠标点击后,开始赛跑及绘制线程 public void mouseClicked(MouseEvent evt) { if (!()) ()。 //启动绘制线程 for (int i = 0。 i NUMRUNNERS。 i++) { if (!runners[i].isAlive()) runners[i].start()。 //启动赛跑线程 } } } //end of class MyAdapter 6 Java的多线程机制 36 public void paint(Graphics g) {//paint()方法中绘制框架 … … … } //end of paint() //update()方法中绘制赛跑者的进度 public void update(Graphics g) { for (int i = 0。 i NUMRUNNERS。 i++) { //画两条线 (SPACING, (i+1)*SPACING, SPACING + (runners[i].tick)/100000, (i+1)*SPACING)。 } } //end of update() 6 Java的多线程机制 37 public void run() { //实现 Runnable接口的 run()方法 while (true) { repaint()。 //重新绘制,自动调用 update()方法 try { (10)。 //休眠 ,把执行机会让给低优先级线程 } catch (InterruptedException e) { } } } //end of run() public void stop() { //重载 Applet的 stop()方法 for (int i = 0。 i NUMRUNNERS。 i++) { if (runners[i].isAlive()) runners[i] = null。 //中止赛跑线程 } if (()) updateTh。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。