记一次简单多线程的应用

两线程奇偶数打印

两个线程交替打印0~100的奇偶数:
偶线程:0
奇线程:1
偶线程:2
奇线程:3

偶线程:100

此处我使用的是lock锁来实现的

线程A负责打印偶线程数据:

package org.activemq.test;

public class MyThreadA extends Thread{
    private MyService myService;
    public MyThreadA(MyService myService) {
        this.myService = myService;
    }
    public void run(){
        myService.testPrintDouble();
    }
}

线程B负责打印奇线程数据:

package org.activemq.test;

public class MyThreadB extends Thread{
    private MyService myService;
    public MyThreadB(MyService myService) {
        this.myService = myService;
    }
    public void run(){
        myService.testPrintSingle();
    }
}

Service类:

package org.activemq.test;

import java.util.concurrent.locks.ReentrantLock;

public class MyService {
	// 定义全局变量
    private static int VALUE = 0;
    private ReentrantLock lock = new ReentrantLock();
    public void testPrintDouble() {

        while (VALUE <= 100) {
        	// 获取锁
            lock.lock();
            if (VALUE % 2 == 0) {
                System.out.println("偶线程:" + VALUE);
                VALUE ++;
            }
            // 释放锁
            lock.unlock();
        }
    }

    public void testPrintSingle(){
        while(VALUE < 100){
            lock.lock();
            if (VALUE % 2 == 1){
                System.out.println("奇线程: "+ VALUE);
                VALUE ++;
            }
            lock.unlock();
        }
    }
}

我的测试类如下:

package org.activemq.test;

public class MyTest {
    public static void main(String[] args) {
        MyService myService = new MyService();
        MyThreadA myThreadA = new MyThreadA(myService);
        MyThreadB myThreadB = new MyThreadB(myService);
        myThreadA.start();
        myThreadB.start();
    }
}

第一次发表自己的代码,欢迎各路好友批评指正 ^ _ ^

猜你喜欢

转载自blog.csdn.net/zwqlovejk/article/details/92617329
今日推荐