分析程序,写出结果package com.wj.demo;/** 1.Product类是一个产品类,用来表示生产产品* 2.里面的有set和get方法,set方法用来设置生产什么样的产品,get是得到产品*/class Product{private String name="A";//产品的名字private boolean flag=true;//标志,true代表可以生产,false代表可以取得产品public synchronized void getName() {//得到产品的函数if(flag){//如果标志为true,则代表只可以生产,不能进行取产品try {super.wait();//调用Object父类的方法,使得到该对象锁的线程等待,把该线程放到等待该对象锁的队列里面//,并且释放cpu,和释放该对象的对象锁,使其他的线程可以得到该对象的锁} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(name);//打印产品的名字try {Thread.sleep(200);//该线程休眠200毫秒,释放cup,让其他的线程执行,但是不会释放对象锁} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}flag=true;//把标志置位true,表示已经取了产品了,可以进行生产了,已经不没有产品了,不能得到产品了//调用了super.notifyAll()方法后,并不会马上执行,要等待synchronized代码块所有的程序执行完了以后才会//释放对象锁,进行唤醒其他的线程super.notifyAll();//调用父类Object的方法,释放对象锁,唤醒在等待该对象锁的所有线程}public synchronized void setName(String name) {if(!flag){//如果flag为false则表示,只可以取产品,不能进行生产产品try {super.wait();//进行等待,和上面的一样} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {Thread.sleep(200);//解释如上} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.name = name;//设置产品的名字flag=false;//设置标志,表示可以取产品了,不能再进行生产了super.notifyAll();//如上所示,唤醒其他的想得到该对象锁的所有线程}}//Factory类是一个工厂,用来控制生产什么样的产品class Factory implements Runnable{private Product product;//共享的对象public Factory(Product product) {//构造函数,对product进行初始化super();this.product = product;}@Overridepublic void run() {//覆写的run方法,进行线程操作// TODO Auto-generated method stubfor(int i=1;i<31;i++){if(i%3==1){//如果余数为1,则生产A产品product.setName("A");//生产A产品}else if(i%3==2){//如果余数为2,则生产B产品product.setName("B");//生产B产品}else{//其他的生产C产品product.setName("C");//生产C产品}}}}//Customer是消费者类,用来使用工厂生产的产品class Customer implements Runnable{private Product product;//贡献资源对象public Customer(Product product) {//构造函数,初始化productsuper();this.product = product;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=1;i<31;i++){try {Thread.sleep(500);//进行线程休眠,使打印有时间延迟} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.print(""+i+"----->");this.product.getName();//消费产品}}}public class ThreadDemo4 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProduct p=new Product();//创建共享资源对象Factory fp=new Factory(p);//创建工厂Customer cp=new Customer(p);//创建消费者Thread tfp=new Thread(fp);//创建工厂线程进行生产Thread tcp=new Thread(cp);//创建消费者线程进行消费tfp.start();//启动线程tcp.start();//启动线程}}
查看答案
分析程序,写出结果class MyThread1 extends Thread{private String name;public MyThread1(String name){this.name=name;}@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(name+i);}}}class MyThread2 implements Runnable{private String name;public MyThread2(String name){this.name=name;}@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(name+i);}}}class MyThread3 implements Runnable{private int ticket=5;@Overridepublic void run() {if(ticket>0){System.out.println("卖票:ticket="+ticket--);}}}class MyThread4 implements Runnable{@Overridepublic void run() {for(int i=0;i<3;i++){System.out.println(Thread.currentThread().getName()+"运行,i="+i);}}}class MyThread5 implements Runnable{private String name;private int time;public MyThread5(String name,int time){this.name=name;this.time=time;}@Overridepublic void run() {try {Thread.sleep(this.time);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.name+"线程,休眠"+this.time+"毫秒");}}class MyThread6 implements Runnable{private int ticket=110;@Overridepublic void run() {for(int i=0;i<200;i++){synchronized(this){if(ticket>0){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"卖票:ticket="+ticket--);}}}}}public class ThreadDemo1 {public static void main(String[] args) {MyThread6 mt=new MyThread6();Thread t1=new Thread(mt,"A");Thread t2=new Thread(mt,"B");Thread t3=new Thread(mt,"C");Thread t4=new Thread(mt,"D");Thread t5=new Thread(mt,"E");t1.start();t2.start();t3.start();t4.start();t5.start();}}
分析程序,写出结果class Info{private String name="张三";private boolean flag=false;public synchronized void set(String name){if(!flag){try {super.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.setName(name);try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}flag=false;super.notify();}public synchronized void get(){if(flag){try {super.wait();} catch (InterruptedException e) {e.printStackTrace();}}try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.getName()+"-->" );flag=true;super.notify();}public String getName() {return name;}public void setName(String name) {this.name = name;}}class Producer implements Runnable{private Info info=null;public Producer(Info info){this.info=info;}@Overridepublic void run() {boolean flag=false;for(int i=0;i<20;i++){if(flag){this.info.set("张三");flag=false;}else{this.info.set("李四");flag=true;}}}}class Consumer implements Runnable{private Info info=null;public Consumer(Info info){this.info=info;}@Overridepublic void run() {for(int i=0;i<20;i++){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}this.info.get();}}}public class ThreadDemo2 {public static void main(String[] args) {Info i=new Info();Producer pro=new Producer(i);Consumer con=new Consumer(i);new Thread(pro).start();new Thread(con).start();}}