栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 多线程&对业务代码进行封装——66

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 多线程&对业务代码进行封装——66

        前面示例是在自定义的MyThread类中处理业务,而业务代码要尽量放在 Service 业务类中进行处理,这样代码更加标准
创建类MyList.java代码 
package chapter3.test3_1.test3_1_7;

import java.util.ArrayList;
import java.util.List;

public class MyList {
    volatile private List list = new ArrayList();

    public void add() {
        list.add("anyString");
    }

    public int size() {
        return list.size();
    }
}
创建类MyService.java代码
package chapter3.test3_1.test3_1_7;

public class MyService {
    private Object lock = new Object();
    private MyList list = new MyList();

    public void waitMethod() {
        try {
            synchronized (lock) {
                if (list.size() != 5) {
                    System.out.println("begin wait " + System.currentTimeMillis() + " " + Thread.currentThread().getName());
                    lock.wait();
                    System.out.println(" end wait " + System.currentTimeMillis() + " " + Thread.currentThread().getName());
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void notifyMethod() {
        try {
            synchronized (lock) {
                System.out.println("begin notify " + System.currentTimeMillis() + " " + Thread.currentThread().getName());
                for (int i = 0; i < 10; i++) {
                    list.add();
                    if (list.size() == 5) {
                        lock.notify();
                        System.out.println("仅仅是发出通知而已,wait后面的代码并没有立即执行,因为锁没有释放");
                    }
                    System.out.println("add次数:" + (i + 1));
                    Thread.sleep(1000);
                }
                System.out.println("end notify" + System.currentTimeMillis() + "" + Thread.currentThread().getName());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
创建类MyThreadA.java
package chapter3.test3_1.test3_1_7;

public class MyThreadA extends Thread {
    private MyService service;

    public MyThreadA(MyService service) {
        super();
        this.service = service;
    }

    @Override
    public void run() {
        service.waitMethod();
    }
}
创建类MyThreadcB.java
package chapter3.test3_1.test3_1_7;

public class MyThreadB extends Thread {
    private MyService service;

    public MyThreadB(MyService service) {
        super();
        this.service = service;
    }

    @Override
    public void run() {
        service.notifyMethod();
    }
}
创建类Test.java代码
package chapter3.test3_1.test3_1_7;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        MyService service = new MyService();
        MyThreadA t1 = new MyThreadA(service);
        t1.start();
        Thread.sleep(5000);
        MyThreadB t2 = new MyThreadB(service);
        t2.start();
    }
}
控制台运行结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号