网站建设资讯

NEWS

网站建设资讯

java线程的应用场景有哪些

这篇文章主要为大家展示了“java线程的应用场景有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java线程的应用场景有哪些”这篇文章吧。

秦安ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

解决生产者,消费者存在问题,可使用如下方法(代码示例包含):

1.  解决数据同步问题:使用同步代码块;

2. 解决重复问题:

    加入等待与唤醒机制-->由Object类提供方法:

等待:public final void wait() throws InterruptedException

唤醒第一个等待线程:public final void notify();

唤醒全部等待线程:public final void notifyAll();

代码示例:

**
 * 生产者消费者实体
 * YangKuo 2018/11/15 18:21
 */
public class Info {

    private String title;

    private String content;

    /**
     * flag=true 表示可以生产,但不能取走
     * flag=false 表示不能生产,可以取走
     */
    private Boolean flag = true;

    public synchronized void setInfo(String title, String content) throws InterruptedException {
        if (!flag) {//此时不能够进行生产,等待取走
            super.wait();
        }
        Thread.sleep(100);
        this.title = title;
        this.content = content;
        flag = false;//生产完成
        super.notify();

    }

    public synchronized void getInfo() throws InterruptedException {
        if (flag) {//此时应该生产,不应该取走
            super.wait();//等待
        }
        Thread.sleep(100);
        System.out.println(this.title + "----->" + this.content);
        flag = true;//消费完成
        super.notify();
    }

}

/**
 * 生产者
 * YangKuo 2018/11/15 18:26
 */
public class Producer implements Runnable {

    private Info info;

    public Producer(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        for (int x = 0; x < 50; x++) {
            if (x % 2 == 0) {
                try {
                    info.setInfo("张三","一个帅哥");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                try {
                    info.setInfo("小白兔","一个可爱的小动物");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

/**
 * 消费者
 * YangKuo 2018/11/15 18:26
 */
public class Customer implements Runnable {

    private Info info;

    public Customer(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        for (int x = 0; x < 50; x++) {
            try {
                info.getInfo();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

/**
 * 生产者,消费者测试
 * YangKuo 2018/11/15 18:35
 */
public class Test {

    public static void main(String args[]) {
        Info info = new Info();
        Producer p = new Producer(info);
        Customer c = new Customer(info);
        new Thread(p).start();
        new Thread(c).start();
    }
}

补充:wait()与Sleep方法的区别

wait(): Object类定义的方法,表示线程要等待执行,必须通过notify(),notifyAll()方法唤醒

Sleep(): 是Thread类定义的方法,在休眠到一定时间后将自己唤醒。

以上是“java线程的应用场景有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


标题名称:java线程的应用场景有哪些
URL分享:http://cdweb.net/article/pcpige.html