Runnable接口
a. 该接口只有一个方法:public void run();
b. 实现该接口的类必须覆盖该run方法
c. 实现了Runnable接口的类并不具有任何天生的线程处理能力,这与那些从Thread类继承的类是不同的
d. 为了从一个Runnable对象产生线程,必须再单独创建一个线程对象,并把Runnable对象传递给它。
实例:
package com.bijian.thread; /* * 图形抽象类 */ public abstract class Shape { abstract void draw (); }
package com.bijian.thread; public class Rectangle extends Shape implements Runnable { private int w, h; Rectangle() { // Create a new Thread object that binds to this runnable and start // a thread that will call this runnable's run() method new Thread(this).start(); } Rectangle(int w, int h) { if (w < 2) throw new IllegalArgumentException("w value " + w + " < 2"); if (h < 2) throw new IllegalArgumentException("h value " + h + " < 2"); this.w = w; this.h = h; } void draw() { for (int c = 0; c < w; c++) System.out.print('*'); System.out.print('\n'); for (int r = 0; r < h - 2; r++) { System.out.print('*'); for (int c = 0; c < w - 2; c++) System.out.print(' '); System.out.print('*'); System.out.print('\n'); } for (int c = 0; c < w; c++) System.out.print('*'); System.out.print('\n'); } public void run() { for (int i = 0; i < 5; i++) { w = rnd(30); if (w < 2) w += 2; h = rnd(10); if (h < 2) h += 2; draw(); } } int rnd(int limit) { // Return a random number x in the range 0 <= x < limit return (int) (Math.random() * limit); } }
package com.bijian.thread; public class RunnableDemo { public static void main(String[] args) { Rectangle r = new Rectangle(5, 6); r.draw(); // Draw various rectangles with randomly-chosen widths and heights new Rectangle(); } }
说明:
Rectangle r = new Rectangle(5, 6);
r.draw();
这两句代码会输出一个长5个*、宽6个*的矩形
new Rectangle();
这名代码会启动Rectangle构造方法中的线程,调用此类中的run方法,循环输出5个长和宽随机大小的矩形。