多线程之解决数据的重复设置和重复取出

class Message{

private String title;

private String content;

private boolean flag = true;

//flag == true:表示可以生产,但是不能取走

//flag == flase:表示可以取走,但是不能生产

public synchronized void set(Stringtitle,String content){

if(this.flag == false){

try {

super.wait();

} catch(InterruptedException e) {

e.printStackTrace();

}

}

this.title = title;

try {

Thread.sleep(100);

} catch (InterruptedExceptione) {

e.printStackTrace();

}

this.content = content;

this.flag = false;

super.notify();

}

public synchronized void get(){

if(this.flag == true){

try {

super.wait();

} catch(InterruptedException e) {

e.printStackTrace();

}

}

try {

Thread.sleep(100);

} catch (InterruptedExceptione) {

e.printStackTrace();

}

System.out.println(this.title+"---> "+this.content);

this.flag = true;

super.notify();

}

}

class Productorimplements Runnable{

private Message msg = null;

public Productor(Message msg){

this.msg = msg;

}

@Override

public void run(){

for(int i = 0;i < 50;i++){

if(i % 2 == 0){

this.msg.set("2012-12-21","世界末日");

}

else{

this.msg.set("付谢", "打扫卫生迎接末日");

}

}

}

}

class Customerimplements Runnable{

private Message msg = null;

public Customer(Message msg){

this.msg = msg;

}

@Override

public void run(){

for(int i = 0;i < 50;i++){

this.msg.get();

}

}

}

public classTestDemo3{

public static void main(String[] args){

Message msg = new Message();

new Thread(newProductor(msg)).start();

new Thread(newCustomer(msg)).start();

}

}

·等待:publicfinal void wait() throws InterruptedException;

·唤醒第一个等待线程:public final void notify();

·唤醒全部等待线程:public final void notifyAll()。

时间: 2024-10-20 21:50:33

多线程之解决数据的重复设置和重复取出的相关文章

多线程之解决数据错位问题

class Message{ private String title; private String content; public synchronized void set(Stringtitle,String content){ this.title = title; try { Thread.sleep(100); } catch (InterruptedExceptione) { e.printStackTrace(); } this.content = content; } pub

c++11 多线程间共享数据 &lt;c++ concurrency in action&gt;

本章主要描述多线程之间共享数据的方法.存在问题.解决方案. 第一部分:mutex在保护共享数据中的使用 1.最简单使用: #include<mutex> std::mutex some_mutex; void func(){ some_mutex.lock(); //访问共享数据 .... some_mutex.unlock(); } 2.向lock_guard推进: 但是不推荐直接使用lock.unlock,因为unlock一定要调用,如果由于你的疏忽或前面的异常将会导致问题,再次利用RAI

十步法原则解决数据质量问题

一.相关概念 1.1 数据质量 数据的一组固有属性满足数据消费者要求的程度. 1)数据固有属性 真实性:即数据是客观世界的真实反映 及时性:即数据是随着变化及时更新的 相关性:即数据是数据消费者关注和需要的 2)高质量数据满足要求(消费者角度) 可得的,当数据消费者需要时能够获取到: 及时的,当需要时,数据获得且是及时更新的: 完整的,数据是完整没有遗漏的: 安全的,数据是安全的,避免非授权的访问和操控: 可理解的,数据是可理解和解释的: 正确的,数据是现实世界的真实反映. 1.2 数据质量管理

解决iptables和vsftpd设置的问题

解决iptables和vsftpd设置的问题 博客分类: linux/centos/ubuntu 防火墙J#工作 修改 vi /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_conntrack_ftp" iptables -P INPUT DROP iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED

线程系列03,多线程共享数据,多线程不共享数据

多线程编程,有时希望每个线程的数据相互隔离互不影响,有时却希望线程间能共享数据,并保持同步.本篇体验多线程共享和不共享数据. □ 多线程不共享数据 对于多线程,CLR到底是怎样为它们分配内存栈空间呢?是"一个萝卜一个坑",每个线程都有自己的栈空间:还是"大树底下好乘凉",所有的线程共享同一个栈空间? 我们让2个线程执行相同的静态方法,用到相同的变量,通过打印变量来求证多线程栈空间的分配情况. class Program { static void Main(stri

Spark性能调优之解决数据倾斜

Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    ? 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hive表中的数据本身很不均匀(比如某个 key对应了100万数据,其他key才对应了10条数据),而且业务场景需要频繁使用Spark对Hive表 执行某个分析操作,那么比较适合使用这种技术方案.    ? 方案实现思路:此时可以评估一下,是否可以通过Hive来进行数据预处理(即通过Hive ETL预先对

压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

最近有一网站使用Sqlite数据库作为数据临时性的缓存,对多片区进行划分 Sqlite数据库文件,每天大概新增近1万的数据量,起初效率有明显的提高,但历经一个多月后数据库文件从几K也上升到了近160M,数据量也达到了 40多万条,平均每一条数据占用了 4K的空间,虽然使用上的效率直观上没有造成太大的影响,但服务器的占用内存却比原来多占用了20%左右.今天刚好打算清除一个Sqlite的冗余数据, 将保留最近10天的数据就可以了,结果执行了删除指令delete后删除30多万条数据保留了10多万数据,

.net解决数据导出excel时的格式问题

在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式. 下面简单介绍一下以上问题的解决方法: 1.首先,了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读 取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果 c

Excel删除重复数据及用公式筛选重复项并标记颜色突出显示

当表格记录比较多时,常常会有重复数据,而重复记录往往只希望保存一条,因此需要把多余的删除:在 Excel 中,删除重复数据有两种方法,一种是用“删除重复数据”删除,另一种是用“高级筛选”删除:其中前者删除重复数据后会在表格末尾留下空行,而后者不会.如果只想查看重复数据而不必删除,可以给重复数据标记颜色突出显示,这样会一目了然.另外,还可以用公式统计每条重复数据有几条或筛选出重复数据.以下是Excel删除重复数据及用公式筛选重复项并标记颜色的具体操作方法,操作中所用版本为 Excel 2016.