//测试:生产者消费者模型-->利用缓冲区解决:管程法
//生产者,消费者,产品,缓冲区
public class TestPC {
public static void main(String[] args) {
SynContainer container = new SynContainer();
new Productor(container).start();
new Consumer(container).start();
}
}
//生产者
class Productor extends Thread{
SynContainer container;
public Productor(SynContainer container) {
this.container = container;
}
//生产
@Override
public void run(){
for (int i = 1; i < 101; i++) {
System.out.println("生产了第"+i+"只鸡");
container.push(new Chicken(i));
}
}
}
//消费者
class Consumer extends Thread{
SynContainer container;
public Consumer(SynContainer container) {
this.container = container;
}
@Override
public void run(){
for (int i = 1; i < 101; i++) {
System.out.println("消费了第"+container.pop().id+"只鸡");
}
}
}
//产品
class Chicken{
int id;//产品编号
public Chicken(int id){
this.id = id;
}
}
//缓冲区
class SynContainer{
//需要一个容器大小
Chicken[] chickens = new Chicken[10];
//容器计数器
int count = 0;
//生产者放入产品
public synchronized void push(Chicken chicken){
//如果容器满了,需要等待消费者消费
if (count == 10){
//生产者等待
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果没有满,我们需要丢入产品
chickens[count]=chicken;
count++;
this.notifyAll();
}
//消费者消费产品
public synchronized Chicken pop(){
//判断能否消费
if (count == 0){
//消费者等待
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果可以消费
count--;
Chicken chicken = chickens[count];
//吃完了通知生产者生产
this.notifyAll();
return chicken;
}
}
this.wait和this.notifyAll需要在synchronized代码块中使用
this.wait与线程休眠的sleep方法类似,但是this.wait会释放锁,sleep不会
notify随机选择一个在指定对象上等待的线程激活
notifyAll激活指定对象上等待的所有线程
有时候我们需要把一些图片文件存放到本地,简单的当然可以直接存入缓存路径下;这里想到另外的方法,就是直接将图片数据存到数据库中。这样对于包含图片信息的列表形式的数据的存储就方便多了,当然我们也可以把列表数据中的图片的网络路径存入数据库,但是这样做,下次需要展示时还是要请求,也就是本地化做的并不彻底。下面我们来说说如何实现(这里就不做网络路径下图片的读取了,直接用本地图片代替,主要介绍
fork() || fork()产生几个进程?首先考虑 || 的特点,第一项false, 继续判断第二项;第一项true,则结束。fork调用的一个奇妙之处在于它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:1、在父进程中,fork返回新创建子进程的进程ID;2、在子进程中,fork返回0;3、如果出现错误,fork返回一个负值(不考虑这种情况)第一个fork()产生两个进程,父进
Java 3D API官方教程[翻译一]开始学习Java3D API1 第一章、入门本章目标: 学习了本章之后,你能:•能用一些基本术语解释什么是Java3D •能描述出Java3D程序的基本结构。•能识别出Java3D API中的许多类。•能编写出简单的Java3D动画程序。 Java 3D API是一个用于编写显示和交互操作三维图形对象
1.# pow(x, 0.5)能够计算x的平方根,计算负数的平方根将产生:A. ..._#00310033003100320030003500341690366446768pow(x, 0.5)能够计算x的平方根,计算
HDFS 的设计理念是为了满足特定的大数据应用场景,所以 HDFS 具有一定的局限性,不能适用于所有的应用场景,HDFS 的局限主要有以下几点。1) 实时性差要求低时间延迟的应用不适合在 HDFS 上运行,HDFS 是为高数据吞吐量应用而优化的,这可能会以高时间延迟为代价。2) 小文件问题由于 NameNode 将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总量受限于 NameNode 的内存总容量。根据经验,每个文件、目录和数据块的存储信息大约占 150 字节。过多的小文件存储会_hdfs的局限性
To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem is that there are always some confusing passwords since it is hard to distinguish 1 (one) from l (L _pat 甲级 1035 柳
españolEn una situación real. dos grupos de sujetos que manifestaban diferente nivel de riesgo se compararon en diferentes medidas de precisión en los juicios de probabilidad. Después de contestar un ...
前提:有自己的直播服务器,或者本地搭建一个服务器进行测试用;代码里面没有给出服务器链接,请谅解。下面开始介绍使用方法:1、使用cocoapods添加第三方库:pod 'Masonry' (按钮布局用到了,直播核心没有用到)pod 'IQKeyboardManager'pod 'LFLiveKit'pod 'BarrageRenderer'2、在控制器里添加推流界面:2.1、导入头文件:#imp..._php rtmp
Linux关机命令在Linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。关闭命令: shutdownsync # 将数据由内存同步到硬盘中。shutdown # 关机指令,你可以 man shutdown 来看一下帮助文档。# 例如你可以运行以下命令关机:shutdown -h 10 # 这个命令代表,计算机将在10分钟后关机shutdown -h now # 立即关机shutdown -h 20:25._比当前晚十分钟关机
如何在Java中发送Https Post请求我想从Java代码login到应用程序。 这是我的代码…String httpsURL = "https://www.abcd.com/auth/login/"; String query = "email="+URLEncoder.encode("[email protected]","UTF-8"); query += "&"; query += "pa..._java https post请求
机器视觉、网关、嵌入式计算机及行业应用平台服务商——朗锐智科,近期发布了全新的PCIe-3504PoE 千兆以太网图像采集卡。凭借全面的PoE电源保护和朗锐智科独有的多卡图像采集功能、智能PoE管理,以及朗锐智科在视觉领域丰富的解决方案,PCIe-3504PoE能够为广泛的机器视觉应用提供全面的支持。PCIe-3504PoE的电源保护功能可以确保相机和其...
#include #include #define OK 1#define ERROR 0typedef int status;typedef struct BiNode{ char data; struct BiNode *lchild,*rchild;}BiTNode,*BiTree; //定义二叉树status createBiNode(BiTree &t){