首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 多线程事例

2012-11-01 
java 多线程例子有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…由于线程执行的不

java 多线程例子
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…
由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。
线程同步有两种基本方法:
(1)    synchronized
(2)    wait,notify,notifyAll
现在分别采用这两种方法来解答这道题目。

package multithread;class XunleiLock {       public String name = "A";       public String getName() {              return name;       }       public void setName(String name) {              this.name = name;       }}public class XunleiInterviewMultithread {public static void main(String[] args) {XunleiLock lock = new XunleiLock();new Thread(new XunleiPrinter("A", lock)).start();new Thread(new XunleiPrinter("B", lock)).start();new Thread(new XunleiPrinter("C", lock)).start();}}class XunleiPrinter implements Runnable {private String name = "";private XunleiLock lock = null;private int count = 10;public XunleiPrinter(String name, XunleiLock lock) {this.name = name;this.lock = lock;}@Overridepublic void run() {while (count > 0) {synchronized (lock) {if (lock.getName().equalsIgnoreCase(this.name)) {System.out.print(name);count--;if (this.name.equals("A")) {lock.setName("B");} else if (this.name.equals("B")) {lock.setName("C");} else if (this.name.equals("C")) {lock.setName("A");}}}}}}


第二种方法:修改线程主体:
package multithread;class XunleiPrinter2 implements Runnable {       private String name = "";       private XunleiLock lock = null;       private int count=10;       public XunleiPrinter2(String name, XunleiLock lock) {              this.name = name;              this.lock = lock;       }       @Override       public void run() {              while(count>0) {                     synchronized (lock) {                            while(!lock.getName().equalsIgnoreCase(this.name)) {                                   try{                                          lock.wait();                                   }catch(InterruptedException e){                                          e.printStackTrace();                                   }                            }                            System.out.print(name);                            count--;                            if (this.name.equals("A")) {                                   lock.setName("B");                            } else if (this.name.equals("B")) {                                   lock.setName("C");                            } else if (this.name.equals("C")) {                                   lock.setName("A");                            }                            lock.notifyAll();                     }              }       }}

热点排行