多线程初探(七)

来源:互联网 发布:电脑软件技术培训 编辑:程序博客网 时间:2024/05/16 10:44
package com.liujunhua.it02;/** * 线程间的通信: * 所谓线程间通信就是多个线程操作同一个资源,但操作的动作不同。 *  * 这里输入和输出线程会抢夺cpu执行权,如果输入线程抢到了cpu的执行权就会一直执行执行赋值操作,显然当前的赋值操作会覆盖 * 上一次的赋值操作。如果输出线程抢到了cpu的执行权时,就会一直进行输出操作,显然,在其有执行权的期间它会一直对当前的 * 值进行不停的输出。 *  */public class Demo03 {public static void main(String[] args) {        //创建了一个资源对象Res r = new Res();/* * 将Runnable子类的两个对象实例化 * 通过参数传递将r传递到in和out对象中 * in和out是对同一个r对象进行操作 */Input in = new Input(r);Output out = new Output(r);//将Runnable对象与线程联系起来Thread t1 = new Thread(in);Thread t2 = new Thread(out);t1.start();t2.start();}}class Res {String name;String sex;}class Input implements Runnable {private Res r;Input(Res r) {this.r = r;}@Overridepublic void run() {// TODO Auto-generated method stubint mark = 0;while (true) {synchronized (r) {if (mark == 0) {r.name = "mike";r.sex = "man";} else {r.name = "丽丽";r.sex = "女女";}mark = (mark + 1) % 2;}}}}class Output implements Runnable {private Res r;Output(Res r) {this.r = r;}@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {synchronized (r) {System.out.println(r.name + "........" + r.sex);}}}}

0 0
原创粉丝点击