Java基础:多线程 Home » 编程开发 » Java基础:多线程 我上课整理出来的多线程的例子,大家看看。包括: 使用Thread创建线程;使用Runnable创建线程;实例:让人能够同时说话和开车;实例:模拟生成者和消费者。 1、使用Thread实现多线程 示例代码: package ch18;public class ThreadTest extends Thread{public boolean b=false;public static void main(String[] args) {ThreadTest thread = new ThreadTest();thread.setName(“child”);thread.start();try {thread.join();} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}ThreadTest thread1 = new ThreadTest();thread1.setName(“child——-“);thread1.start();for(int i=0;i<5;i++){try {sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(currentThread().getName()+”:”+i);}thread.b = true;thread1.b = true;}public void run(){for(int i=0;i<10;i++){try {sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(currentThread().getName()+”:”+i);if(b)break;}}} 2、使用Runnable实现多线程 示例代码: package ch18;public class RunnableTest implements Runnable{public static void main(String[] args) {Runnable r1 = new RunnableTest();Thread thread = new Thread(r1,”t1″);thread.start();thread.setPriority(9);Thread thread2 = new Thread(r1,”t2″);thread2.start();thread2.setPriority(2);}public void run(){for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+”:”+i);}}} 3、实例:让人能够同时说话和开车 示例代码: package ch19;import static java.lang.System.out;public class Person implements Runnable{int speakNo=0;int driveNo=0;private boolean canStop=false; // 是否停止线程public static void main(String[] args) {Person person = new Person();Thread t1 = new Thread(person,”speak”); // 第二个参数给出线程的名字Thread t2 = new Thread(person,”drive”);t1.setPriority(8);t2.setPriority(4);t1.start();t2.start();try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}person.setCanStop(true);}public void run(){while(true){String name = Thread.currentThread().getName(); // 得到当前线程 的名字if(name.equals(“speak”)){speak();}else{drive();}if(canStop){break;}}}public void drive(){out.println(“正在————–开车!”+driveNo++);//try {//Thread.currentThread().sleep(5);//} catch (InterruptedException e) {//e.printStackTrace();//}}public void speak(){out.println(“正在说话!”+speakNo++);//try {//Thread.currentThread().sleep(5);//} catch (InterruptedException e) {//e.printStackTrace();//}}public boolean isCanStop() {return canStop;}public void setCanStop(boolean canStop) {this.canStop = canStop;}} 4、实例:模拟生成者消费者模型 示例代码: package ch19;import static java.lang.System.out;// 第一步:实现Runnable接口,并且实现run方法public class Factory implements Runnable {// 第二步:定义表示库存变量quantity,quantity的值会影响生产和消费这两个方法的执 行,有产品才可以消费,仓库没有满才可以生产// 库存,初始为0,最大为10private int quantity = 0;// 第六步:创建成员变量canStop控制线程的结束,主线程中修改控制变量的值,在生产和 消费线程中判断该变量的值,然后结束线程。private boolean canStop = false;public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity = quantity;}public boolean isCanStop() {return canStop;}apublic void setCanStop(boolean canStop) {this.canStop = canStop;}// 第四步:创建工厂对象,然后创建生产和消费的线程并启动public static void main(String args[]) {Factory factory = new Factory();Thread t1 = new Thread(factory, “producer1”);Thread t2 = new Thread(factory, “producer2”);Thread t3 = new Thread(factory, “consumer1”);Thread t4 = new Thread(factory, “consumer2”);t1.start();t2.start();t3.start();t4.start();try {Thread.currentThread().sleep(300);} catch (InterruptedException e) {e.printStackTrace();}factory.setCanStop(true);}// 第五步:实现run方法,根据当前线程的任务去调用相应的方法,或者去生产 或者消费public void run() {String threadName = Thread.currentThread().getName();while (true) {if (threadName.startsWith(“producer”)) {produce();} else {consume();}if(canStop)break;}}// 第三步:定义消费和生产的方法public synchronized void consume() {// 判断是否有商品while (quantity == 0) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}// 消费商品quantity–;String threadName = Thread.currentThread().getName();out.println(threadName + “消费了一个商品!”);try {Thread.currentThread().sleep(50);} catch (InterruptedException e) {e.printStackTrace();}notifyAll();}// 生成商品public synchronized void produce() {// 判断仓库是否已经满了,如果满了,就等待while (quantity == 10) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}// 生产quantity++;String threadName = Thread.currentThread().getName();out.println(threadName + “生产了一个商品!”);try {Thread.currentThread().sleep(50);} catch (InterruptedException e) {e.printStackTrace();}notifyAll();}} 看了哪些风景,遇到哪些人。尽管同学说,去旅行不在于记忆,