这篇文章主要为大家展示了“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线程的应用场景有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。