温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java线程的应用场景有哪些

发布时间:2021-11-23 10:39:54 来源:亿速云 阅读:154 作者:小新 栏目:编程语言

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

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

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线程的应用场景有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI