11.18
public class PCTest { public static void main(String[] args) { Share s=new Share(); Producer p=new Producer(s,1); Consumer c=new Consumer(s,1); p.start(); c.start(); } }
运行结果如下:
生产者1 输出的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
消费者1 得到的数据为:0
生产者1 输出的数据为:1
生产者1 输出的数据为:2
生产者1 输出的数据为:3
生产者1 输出的数据为:4
生产者1 输出的数据为:5
生产者1 输出的数据为:6
生产者1 输出的数据为:7
生产者1 输出的数据为:8
生产者1 输出的数据为:9
public class SimpleRunnable implements Runnable { public void run() { // 覆盖run()方法 int i = 15; while (i-- >= 1) { // 循环15次 try { System.out.print("*"); Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { Thread thread1 = new Thread(new SimpleRunnable(),"线程1"); // 创建线程1 thread1.start(); // 启动线程1 } }
运行结果如下:
***************
public class SimpleThread extends Thread { public SimpleThread(String name) { // 参数为线程名称 setName(name); } public void run() { // 覆盖run()方法 int i = 0; while (i++ < 5) { // 循环5次 try { System.out.println(getName() + "执行步骤" + i); Thread.sleep(1000); // 休眠1秒 } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { SimpleThread thread1 = new SimpleThread("线程1"); // 创建线程1 SimpleThread thread2 = new SimpleThread("线程2"); // 创建线程2 thread1.start(); // 启动线程1 thread2.start(); // 启动线程2 } }
运行结果如下:
线程2执行步骤1
线程1执行步骤1
线程2执行步骤2
线程1执行步骤2
线程2执行步骤3
线程1执行步骤3
线程2执行步骤4
线程1执行步骤4
线程2执行步骤5
线程1执行步骤5
public class SyncThread extends Thread { private char cha; public SyncThread(char cha) { // 构造函数 this.cha = cha; } public void run() { PrintClass.printch(cha); // 调用同步方法 System.out.println(); } public static void main(String[] args) { SyncThread t1 = new SyncThread('A'); // 创建线程A SyncThread t2 = new SyncThread('B'); // 创建线程B t1.start(); // 启动线程A t2.start(); // 启动线程B } } class PrintClass { public static synchronized void printch(char cha) { // 同步方法 for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); // 打印一个字符休息1秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.print(cha); } } }
运行结果如下:
AAAAA
BBBBB
public class Water { boolean water = false; // 反应水塘状态的变量 public boolean isEmpty() { // 判断水塘是否无水的方法 return water ? false : true; } public void setWater(boolean haveWater) { // 更改水塘状态的方法 this.water = haveWater; } public static void main(String[] args) { Water water=new Water(); // 创建水塘对象 ThreadA threadA = new ThreadA(water); // 创建进水线程 //ThreadB threadB = new ThreadB(water); // 创建排水线程 //threadB.start(); // 启动排水线程 threadA.start(); // 启动进水线程 } }
运行结果如下:
开始进水.....
1分钟
2分钟
3分钟
4分钟
5分钟
进水完毕,水塘水满。