千家信息网

java线程的应用场景有哪些

发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,这篇文章主要为大家展示了"java线程的应用场景有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java线程的应用场景有哪些"这篇文章吧。解决生产者,
千家信息网最后更新 2024年12月01日java线程的应用场景有哪些

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

0