「java怎么保证消费」Java生产消费模式
本篇文章给大家谈谈java怎么保证消费,以及Java生产消费模式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java多线程安全-多生产多消费问题
- 2、java实现生产者和消费者问题的几种方式
- 3、Java多线程如何才能协调好生产和消费的关系
- 4、java生产与消费的问题
- 5、java 阻塞队列怎么消费指定数据
- 6、java开发的支付系统系统安全性怎么保证
Java多线程安全-多生产多消费问题
public class Test { public static void main(String[] args) { Runnable ticket=new TrainTicket(); Thread seller1=new Thread(ticket); Thread seller2=new Thread(ticket); seller1.start(); seller2.start(); } } class TrainTicket implements Runnable{ //100张卖完改1000吧假设座位号1-1000; public int n=1000; @Override public void run() { while(n0){ System.out.println(Thread.currentThread().getName()+"卖座位:"+n); n--; } } }
java实现生产者和消费者问题的几种方式
生产者消费者问题是多线程的一个经典问题,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。
解决生产者/消费者问题的方法可分为两类:
采用某种机制保护生产者和消费者之间的同步;
在生产者和消费者之间建立一个管道。
第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。
在Java中有四种方法支持同步,其中前三个是同步方法,一个是管道方法。
wait()
/
notify()方法
await()
/
signal()方法
BlockingQueue阻塞队列方法
PipedInputStream
/
PipedOutputStream
通过
wait()
/
notify()方法实现:
wait()
/
nofity()方法是基类Object的两个方法:
wait()方法:当缓冲区已满/空时,生产者/消费者线程停止自己的执行,放弃锁,使自己处于等等状态,让其他线程执行。
notify()方法:当生产者/消费者向缓冲区放入/取出一个产品时,向其他等待的线程发出可执行的通知,同时放弃锁,使自己处于等待状态。
通过await()
/
signal()方法实现:
await()和signal()的功能基本上和wait()
/
nofity()相同,完全可以取代它们,但是它们和新引入的锁定机制Lock直接挂钩,具有更大的灵活性。通过在Lock对象上调用newCondition()方法,将条件变量和一个锁对象进行绑定,进而控制并发程序访问竞争资源的安全。
通过BlockingQueue方法实现:
它是一个已经在内部实现了同步的队列,实现方式采用的是我们第2种await()
/
signal()方法。它可以在生成对象时指定容量大小。它用于阻塞操作的是put()和take()方法:
put()方法:类似于我们上面的生产者线程,容量达到最大时,自动阻塞。
take()方法:类似于我们上面的消费者线程,容量为0时,自动阻塞。
Java多线程如何才能协调好生产和消费的关系
Java多线程:是程序中的一个单一的连续控制流程,一个线程可以拥有多个线程 。记得刚学习Java多线程的时候,对线程中的run()不知道是什么意思,现在大胆认为它就像Java的main()一样,可以理解为一个线程启动运行的入口函数。
创建一个线程的方式有两种,一种是继承Thread类,还有就是实现Runnable 接口,两者都要重写run。
时间偏分给我们想要执行的线程时,可以将该线程的优先级设置Thread.MAX_PRIORITY .下面是一个生产者和消费者的多线程的例子:其规则很简单,只有生产出来东西才能有东西来消费。
Java多线程知识点:线程的创建、线程的同步、顺便回顾一下大学的操作系统。
class Test {
public static void main(String[] args) {
Queue q = new Queue();
Producer p = new Producer(q);
Consumer c = new Consumer(q);
p.start();
c.start();
}
}
class Producer extends Thread {
Queue q;
Producer(Queue q) {
this.q = q;
}
public void run() {
for (int i = 0; i 10; i++) {
q.put(i);
System.out.println("Producer put " + i);
}
}
}
class Consumer extends Thread {
Queue q;
Consumer(Queue q) {
this.q = q;
}
public void run() {
while (true) {
System.out.println("Consumer get " + q.get());
}
}
}
class Queue {
int value;
boolean bFull = false;
public synchronized void put(int i) {
if (!bFull) {
value = i;
bFull = true;
notify();
}
try {
wait();
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized int get() {
if (!bFull) {
try {
wait();
} catch (Exception e) {
e.printStackTrace();
}
}
bFull = false;
notify();
return value;
}
}
java生产与消费的问题
blockingQueue实现生产者和消费者很简单
你这个代码不好看,定义得很粗糙,变量应该有清晰明了的意义比较好
java 阻塞队列怎么消费指定数据
按照个人理解,队列就是按顺序消费的数据结构,先进先出,不应该存在可以指定消费数据操作这样的功能,一般都是你每次消费一个数据,然后判断这个数据是不是你要消费的数据,是的话按照逻辑处理,不是的话交由另一个逻辑处理,或者抛弃不处理酱紫的。
java开发的支付系统系统安全性怎么保证
前后端数据要加密处理,并且数据库操作要使用事务处理。java开发推荐千锋教育,千锋教育初心至善,匠心育人,欢迎咨询。
java开发的优势:
1、java是面向对象的语言,能够反应现实生活中的一些存在的事物。
2、java是平台无关性的;java可以一次编译,到处运行。java是解释性语言,在java中,java编译器将java编译成中间代码,然后再java虚拟机(jvm)上解释执行。中间代码与平台无关,所以提供了很好的移植性。
3、java提供了很多的内置类库,通过类库简化了开发人员的工作。缩短了开发时间。
4、java提供了WEB应用开发,列如Applet,servlet,jsp来开发程序。用Socket,RMI用来开发分布式应用程序类库。
5、具有良好的安全性和健壮性。
6、去除了c++中的难以理解的东西。
想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋教育面授课程包括:HTML5大前端培训、Java+分布式开发培训、Python人工智能+数据分析培训、全领域实战UI/UE设计设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、网络安全培训、区块链培训、影视剪辑包装培训、游戏原画培训、全媒体运营培训等,实力强大,欢迎咨询。
java怎么保证消费的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java生产消费模式、java怎么保证消费的信息别忘了在本站进行查找喔。
发布于:2022-11-30,除非注明,否则均为
原创文章,转载请注明出处。