java数字和字母两个线程交替打印

写两个线程,交替打印数字和字母。

 

package com.commontest.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by jiangfuqiang on 2016/5/13.
 */
public class ThreadPoolTest {

    public static void main(String[] args) {
        ReentrantLock lock = new ReentrantLock();
        Condition digitLock = lock.newCondition();
        Condition charLock = lock.newCondition();
        AtomicBoolean flag = new AtomicBoolean(false);
        new Thread(new Thread1(digitLock,charLock,flag,lock)).start();
        new Thread(new Thread2(digitLock,charLock,flag,lock)).start();
    }
}

class Thread1 implements Runnable {

    private Condition digitLock;
    private AtomicBoolean flag;
    private Condition charLock;
    private ReentrantLock lock;
    public Thread1(Condition digitLock, Condition charLock, AtomicBoolean flag, ReentrantLock lock) {
        this.digitLock = digitLock;
        this.flag = flag;
        this.charLock = charLock;
        this.lock = lock;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.print((i+1));
            lock.lock();
            if (i >= 9) {
                flag.set(true);
                charLock.signal();
                lock.unlock();
                break;
            }
            try {

                    charLock.signal();
                    digitLock.await();
                lock.unlock();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }


    }
}

class Thread2 implements Runnable {

    private Condition digitLock;
    private AtomicBoolean flag;
    private Condition charLock;
    private ReentrantLock lock;
    public Thread2(Condition digitLock, Condition charLock,AtomicBoolean flag, ReentrantLock lock) {
        this.digitLock = digitLock;
        this.flag = flag;
        this.charLock = charLock;
        this.lock = lock;
    }

    public void run() {
        for (int i = 0; i < 26; i++) {
            if (i != 0 && i%2 == 0 && !flag.get()) {

                try {
                    lock.lock();
                        digitLock.signal();
                        charLock.await();
                    lock.unlock();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            System.out.print((char)(97+i));

        }

    }
}

  

posted @ 2016-06-25 14:38  jiangfullll  阅读(1871)  评论(0)    收藏  举报