- 浏览: 561169 次
-
文章分类
- 全部博客 (373)
- java 文件读取 (2)
- juery (1)
- 打印 (1)
- js (3)
- oracle (4)
- 数据库 (2)
- tomcat (2)
- pdf2swf (1)
- svn错误总结 (1)
- struts (1)
- mysql (11)
- struts2 (2)
- powerdesigner (1)
- ibatis (1)
- 无线技术 (1)
- 验证码 (1)
- 身份证的算法 (1)
- java多线程 (12)
- java敏感词替换 (1)
- struts2文件上传 (1)
- cache ibatis 数据缓存 (1)
- PermGen space TOMCAT (1)
- java反射 (1)
- 存储架构 (1)
- NFS (1)
- Java回调函数 (1)
- 数据库锁 (1)
- jaxb (1)
- android异常 (1)
- 自定义标签tld (1)
- HttpSessionListener (1)
- Spring AOP应用 (1)
- 如何获取e.printStackTrace()的内容 (1)
- jms activemq (1)
- EhCache (3)
- JNA (1)
- AJP (1)
- jQuery (1)
- 依赖注入 (1)
- EJB (1)
- ant (1)
- 快速失败 (1)
- 并发集合 (1)
- 内部类 匿名类 (1)
- 数据库数据共享 (1)
- oracle存储过程 (1)
- 枚举类型 (1)
- 同步 (1)
- Spring MVC (1)
- concurrent (1)
- JAVA异常 (1)
- 观察者模式 (1)
- 通信协议 (1)
- mysql 百万级数据 (1)
- Timer TimerTask (1)
- java堆栈 (1)
- 负载均衡 (1)
- ORA-02291 (1)
- 存储过程 (1)
- velocity (1)
- dsa数字签名 (1)
- Linux (11)
- UTC时间 (1)
- git笔记 (1)
- postgresql (1)
- 性能吞吐量 (1)
- JNDI (1)
- 数据库并发控制 (1)
- MongoDB (8)
- socket.io (3)
- 数据结构 (1)
- zypper (1)
- wget (1)
- gradle (1)
- Linux常用命令大全 (2)
- Redis (10)
- JMeter (1)
- 跳表 (1)
- IO (1)
- rabbitmq (3)
- hadoop (1)
- esb (1)
- DRBD (1)
- HA高可用性 (1)
- 数据库备份 (1)
- Mysql集群 (2)
- Nginx (4)
- Session共享 (2)
- MongDB (1)
- JAVA (1)
- Mysql字符集 (1)
- solr (11)
- FTP (2)
- erlang (1)
- GraphicMagick (2)
- LVS (2)
- AJAXSUBMIT跨域 (1)
- 一致性哈希 (1)
- tomcat apr (1)
- 笔记 (1)
- freemarker (2)
- https原理 (1)
- DBCP数据源 (1)
- DHCP数据源 (1)
- ssh (2)
- FastDFS (1)
- XSS (1)
- CSRF (1)
- RSA (1)
- android (2)
- redis session (1)
- tomcat ssl (1)
- linux nginx (2)
- nginx ssl (1)
- linux ln (1)
- LVS keepalived (1)
- dubbox (1)
- JNI (1)
- zookeeper (1)
- storm (2)
- XXL-JOB (1)
最新评论
-
neusoft_jerry:
好东西,mark下!感谢楼主!
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程(转载) -
460544406:
[color=red][/color]66
LINUX新建用户,并指定目录,无下载和上传权限(转载) -
soho00147:
结果错误,应该是A: {1,2,3,3,4,5}B: {3,4 ...
集合操作工具类CollectionUtils -
4711363:
能把修改的源码发我一下吗?碰到一些问题,谢谢。4711363@ ...
Redis存储Tomcat集群的Session出现race condition问题解决办法 -
CurrentJ:
直接用spring-session-redis组件。
Redis存储Tomcat集群的Session出现race condition问题解决办法
那么如何解决呢?
1)加入同步
2)加入等待和唤醒
先来看看加入同步会是如何。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
class Info {
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public synchronized void set(String name, int age){
this .name=name;
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
this .age=age;
}
public synchronized void get(){
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
System.out.println( this .getName()+ "<===>" + this .getAge());
}
private String name = "Rollen" ;
private int age = 20 ;
} /** * 生产者
* */
class Producer implements Runnable {
private Info info = null ;
Producer(Info info) {
this .info = info;
}
public void run() {
boolean flag = false ;
for ( int i = 0 ; i < 25 ; ++i) {
if (flag) {
this .info.set( "Rollen" , 20 );
flag = false ;
} else {
this .info.set( "ChunGe" , 100 );
flag = true ;
}
}
}
} /** * 消费者类
* */
class Consumer implements Runnable {
private Info info = null ;
public Consumer(Info info) {
this .info = info;
}
public void run() {
for ( int i = 0 ; i < 25 ; ++i) {
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
this .info.get();
}
}
} /** * 测试类
* */
class hello {
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info);
Consumer con = new Consumer(info);
new Thread(pro).start();
new Thread(con).start();
}
} |
【运行结果】:
Rollen<===>20
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
Rollen<===>20
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
ChunGe<===>100
从运行结果来看,错乱的问题解决了,现在是Rollen 对应20,ChunGe对于100
,但是还是出现了重复读取的问题,也肯定有重复覆盖的问题。如果想解决这个问题,就需要使用Object类帮忙了、
,我们可以使用其中的等待和唤醒操作。
要完成上面的功能,我们只需要修改Info类饥渴,在其中加上标志位,并且通过判断标志位完成等待和唤醒的操作,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
class Info {
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public synchronized void set(String name, int age){
if (!flag){
try {
super .wait();
} catch (Exception e) {
e.printStackTrace();
}
}
this .name=name;
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
this .age=age;
flag= false ;
super .notify();
}
public synchronized void get(){
if (flag){
try {
super .wait();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
System.out.println( this .getName()+ "<===>" + this .getAge());
flag= true ;
super .notify();
}
private String name = "Rollen" ;
private int age = 20 ;
private boolean flag= false ;
} /** * 生产者
* */
class Producer implements Runnable {
private Info info = null ;
Producer(Info info) {
this .info = info;
}
public void run() {
boolean flag = false ;
for ( int i = 0 ; i < 25 ; ++i) {
if (flag) {
this .info.set( "Rollen" , 20 );
flag = false ;
} else {
this .info.set( "ChunGe" , 100 );
flag = true ;
}
}
}
} /** * 消费者类
* */
class Consumer implements Runnable {
private Info info = null ;
public Consumer(Info info) {
this .info = info;
}
public void run() {
for ( int i = 0 ; i < 25 ; ++i) {
try {
Thread.sleep( 100 );
} catch (Exception e) {
e.printStackTrace();
}
this .info.get();
}
}
} /** * 测试类
* */
class hello {
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info);
Consumer con = new Consumer(info);
new Thread(pro).start();
new Thread(con).start();
}
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
【程序运行结果】: Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
ChunGe<===> 100
Rollen<===> 20
先在看结果就可以知道,之前的问题完全解决。 |
发表评论
-
Java线程(九):Condition-线程通信更高效的方式(转载)
2014-10-31 13:06 687接近一周没更新《Java线程》专栏了,主要 ... -
Java线程(八):锁对象Lock-同步问题更完美的处理方式(转载)
2014-10-31 13:06 722Lock是java.util.concurre ... -
Java线程(七):Callable和Future(转载)
2014-10-31 13:05 601接着上一篇继续并发包的学习,本篇说明的 ... -
Java线程(六):线程池(转载)
2014-10-31 13:04 456自JDK5之后,Java推出了一个并发 ... -
Java线程(五):Timer和TimerTask(转载)
2014-10-31 13:04 751Timer和TimerTask可以做为实现线程 ... -
Java线程(四):线程中断、线程让步、线程睡眠、线程合并(转载)
2014-10-30 16:40 716本文来自:高爽|Coder,原文地址:htt ... -
Java线程(三):线程协作-生产者/消费者问题(转载)
2014-10-30 16:37 603上一篇讲述了线程的互斥(同步),但是在很多 ... -
Java线程(二):线程同步synchronized和volatile(转载)
2014-10-30 16:37 597上篇通 过一个简单的例子说明了线程安全与不安全, ... -
Java线程(一):线程安全与不安全(转载)写的有点偏题
2014-10-30 16:36 426作为一个Java web开发人员,很少也不 ... -
java多线程(转载)二
2012-12-10 15:04 1011 -
java多线程(转载)一
2012-12-10 14:09 1006在java中要想实现多线程,有两种手段,一种是继续Thr ...
相关推荐
安装步骤: 1.逍遥商城系统需要PHP+mysql运行环境,可以在windows或linux下运行,具体的php和mysql的版本没有特殊要求,兼容范围还是比较广的,推荐php5.6以上,mysql5.0以上。 2.把文件夹所有文件解压缩在站点目录中, 2.执行http://127.0.0.1/install/index.php进行安装 3.安装完成后,把install目录删掉。
wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布 支持 PHP7.4,PHP8.0 及以上不支持 上传插件到 wp-content/plugins 目录,然后解压 不需要写采集规则,傻瓜式操作,只需要对方的网址域名,在后台动动鼠标即可。
STM32F103使用NRF2401通过ACK响应双向通讯(HAL库) 简单的应用。
Libmodbus 是一个用于 Modbus 协议的开源库,提供了丰富的函数接口,可方便实现设备间的 Modbus 通信,支持多种平台,能轻松移植到不同系统中,有助于开发人员快速构建 Modbus 相关应用程序。我已编译好windows x86 版本的dll
内容概要:本文详细介绍了LabVIEW在汽车EPS转向器海纳传感器标定中的应用,重点探讨了如何通过LabVIEW解决传统标定方法中存在的数据采集实时性不足、标定过程缺乏自动化、数据分析难度大的问题。文中展示了具体的代码实现,包括数据采集、分析、校准和报告生成等功能模块,并通过实际案例展示了该系统的高效性和准确性。此外,文章还讨论了一些常见的调试问题及其解决方案,如通信握手逻辑、信号异常检测、温度补偿等。 适合人群:从事汽车电子、传感器标定及相关领域的工程师和技术人员。 使用场景及目标:适用于需要提高传感器标定效率和精度的企业和个人。目标是通过LabVIEW的应用,实现传感器标定的自动化和智能化,从而提升产品质量和生产效率。 其他说明:文章强调了LabVIEW在处理复杂标定任务中的灵活性和强大功能,提供了多个实用的技术细节和实践经验,对于希望深入了解LabVIEW在工业应用中的开发者非常有价值。
内容概要:本文深入探讨了Simulink If模块在嵌入式系统开发中的强大功能,特别是在汽车电子和工业自动化领域的应用。主要介绍了两种核心技术:一是DBC文件的自动导入生成模型及代码,二是硬件信号的导入生成模型及代码。DBC文件的自动导入能够快速构建CAN总线通信模型,简化信号解析和报文处理,生成的代码可以直接应用于AUTOSAR架构,实现ASW和BSW的无缝对接。硬件信号导入功能则允许开发者轻松地将硬件设备产生的信号集成到Simulink模型中,自动生成带有滤波和其他预处理功能的代码,适用于实时数据采集和控制算法实现。 适合人群:从事嵌入式系统开发、汽车电子、工业自动化等相关领域的工程师和技术人员。 使用场景及目标:① 快速搭建基于DBC文件的CAN总线通信模型,提高开发效率;② 实现硬件信号的实时处理和控制,优化数据采集和信号处理流程;③ 自动生成符合AUTOSAR标准的高质量代码,减少手动编码错误。 其他说明:文中提供了多个Matlab代码示例,展示了具体的操作步骤和生成代码的结构,帮助读者更好地理解和应用这些功能。同时,文中还分享了一些实用技巧,如DBC文件的功能模块拆分、硬件信号的时间戳对齐以及代码生成的优化设置等。
流变学仿真方法:流变学仿真参数设置.zip
内容概要:本文详细介绍了0-1背包问题的两种动态规划解法,包括二维DP数组和优化后的一维滚动DP数组方法。首先定义了最大物品数量和背包容量等常量,接着通过两个数组分别存储每个物品的重量和价值。文中给出的代码实现了完整的算法逻辑:初始化边界条件,迭代更新状态转移方程,最终计算出能够放入背包的最大价值。此外还提供了回溯功能,可以找出具体的最优解组合。为了提高空间效率,文章进一步解释了一维滚动数组的使用方法,并附有完整的C++代码实现。 适合人群:计算机科学专业学生或有一定编程基础、对算法设计与分析感兴趣的读者。 使用场景及目标:①学习经典的动态规划问题解决思路;②理解如何通过状态转移方程来优化复杂度;③掌握二维DP向一维DP转换的技术手段以节省内存开销。 阅读建议:建议读者先理解0-1背包问题的基本概念,再逐步深入研究两种不同的解法,注意对比两者之间的异同点,特别是空间复杂度方面的改进。同时可以通过修改输入数据来测试不同情况下的运行结果,加深对算法的理解。
该资源为natsort-3.0.0.tar.gz,欢迎下载使用哦!
内容概要:本文详细介绍了求解一维抛物热传导方程的各种经典数值方法,包括显式欧拉法、隐式欧拉法、Crank-Nicolson格式(即梯形公式)、二阶BDF格式以及不同的差分格式(如五点差分、九点差分和紧差分)。每种方法不仅给出了理论公式的推导,还提供了完整的MATLAB源码实现,并附有详细的代码解释和数值例子的数据图解分析。通过对不同方法的比较,展示了它们在稳定性和精度方面的优劣。 适合人群:具备一定数学和编程基础的学生、科研人员及工程师。 使用场景及目标:适用于需要解决热传导问题的研究项目,帮助使用者理解并选择合适的数值方法进行仿真计算,优化求解过程。 其他说明:文中强调了边界条件处理的重要性,并建议初学者从简单的Dirichlet边界条件入手练习。此外,还提到了一些常见的陷阱,如MATLAB矩阵索引与物理空间坐标的错位问题,提醒开发者注意这些问题以确保正确性。
一个人的经历信息和个人简介
内容概要:本文详细介绍了三菱FX3U PLC的圆弧插补程序,涵盖从中断扫描初始化、U型插补主程序、移动控制函数到急停复位程序的具体实现方法。通过具体的代码示例,展示了如何利用U型插补指令和服务调用来实现精确的圆弧轨迹控制。此外,文中还讨论了插补过程中的一些关键技术点,如中断优先级设置、插补结果存储、角度参数设置以及误差补偿等。同时,提供了关于脉冲输出、坐标计算和方向控制的实际操作技巧,强调了脉冲当量换算的重要性,并分享了一些调试经验和注意事项。 适合人群:从事工业自动化、运动控制领域的工程师和技术人员,特别是那些对PLC编程有一定基础并希望深入了解三菱FX3U PLC圆弧插补功能的人群。 使用场景及目标:适用于需要进行高精度圆弧轨迹控制的应用场景,如CNC控制系统、机器人运动控制等。目标是帮助读者掌握三菱FX3U PLC的圆弧插补编程技能,提高其在实际项目中的应用能力。 其他说明:文中提供的程序实例不仅有助于理解三菱FX3U PLC的工作原理,还能作为实际项目的参考模板。建议读者在实践中不断优化和完善相关程序,以适应不同的应用场景。
内容概要:本文详细介绍了在一个60吨/小时的反渗透+混床纯水项目中,如何利用西门子200 Smart PLC和Smart Line触摸屏进行系统设计与优化。主要内容涵盖硬件架构搭建(如CPU SR40、AI模块、TM模块)、模拟量处理(如电导率、压力、流量等信号的采集与转换)、数据滤波(如滑动平均值算法)、时钟同步(如自动和手动校准)、用户权限管理(如多级权限设置)、报警处理(如状态位轮询和异或运算)以及混床再生控制(如PID指令和状态机编程)。此外,还涉及了一些实用技巧,如数据追溯功能、报警弹窗中的应急处置指引、隐藏的debug模式等。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉西门子PLC和触摸屏编程的人群。 使用场景及目标:适用于需要深入了解和掌握西门子200 Smart PLC在水处理项目中的具体应用和优化方法的专业人士。目标是提高系统稳定性、可靠性和易用性,确保水处理过程高效、精准地运行。 其他说明:文中提供了大量具体的程序代码片段和实践经验分享,对于实际项目实施具有很高的参考价值。同时,作者强调了细节处理的重要性,如模拟量的精确转换、报警系统的完善设计等,这些都是保障系统正常运行的关键因素。
找了一大圈终于找到了,有些e xing博主发的还有密码和要米,本资源真实可用
增压转换器和涡轮机的功率为1千瓦。它们适合风速高达12 m/s。涡轮机参考旋转速度150转/分
卷积神经网络(CNN)项目源码-基于CNN的行为姿态识别代码
jspm酒店客房预定管理系统
内容概要:本文详细介绍了如何利用西门子博途(TIA Portal)平台,在HMI(人机界面)中实现高效的IO状态监控和动态页面切换。主要内容包括:PLC端使用SCL语言创建结构化IO状态数组并进行动态更新;HMI端通过下拉菜单和动态绑定技术实现单页多设备IO状态的快速切换。文中还提供了具体的代码示例和技术细节,如符号寻址的应用、数组索引的注意事项以及常见的错误规避方法。 适合人群:从事工业自动化控制系统开发的技术人员,特别是熟悉西门子PLC编程和HMI开发的工程师。 使用场景及目标:适用于需要对多个设备或模块进行集中监控的工业现场,能够显著减少HMI画面制作时间和维护成本,提高系统的灵活性和可扩展性。 其他说明:文中提到的方法已在实际项目中得到验证,特别是在处理大量IO点的情况下表现出色。同时强调了良好的架构设计对于系统长期维护的重要性。
内容概要:本文详细介绍了MATLAB在图像检索领域的多种方法和技术,包括词袋模型、颜色特征、形状特征、Hu不变矩和LBP纹理特征。通过具体的代码实例,展示了如何利用这些方法进行图像特征提取和相似度计算。词袋模型借鉴文本处理思想,通过SIFT特征和聚类构建视觉词典;颜色特征主要通过颜色直方图表示图像颜色分布;形状特征则利用Hu不变矩实现平移、旋转和尺度不变性;LBP纹理特征用于描述图像的局部纹理信息。每种方法都有其独特的应用场景和优势。 适合人群:从事图像处理、计算机视觉研究的技术人员,尤其是有一定MATLAB基础的研究人员和开发者。 使用场景及目标:适用于需要高效、精确图像检索的场合,如商品搜索、医学影像分析、安防监控等领域。通过掌握这些方法,能够提高图像检索的速度和准确性,满足不同业务需求。 其他说明:文中不仅提供了详细的理论解释,还附带了大量实用的MATLAB代码片段,帮助读者快速理解和应用这些技术。同时强调了在实际应用中选择合适特征组合的重要性,避免过度依赖单一算法。
内容概要:本文详细介绍了如何使用STC15W104单片机实现2262/1527编码的无线遥控解码器。该解码器具备自动学习遥控器编码、掉电记忆数据以及四路输出控制的功能。硬件方面,P3.2连接315M接收模块,P5.4-P5.7作为输出接口,使用片内EEPROM进行数据存储。软件部分涵盖了定时器配置、中断处理、解码状态机的设计以及EEPROM的操作方法。文中还分享了一些实用的经验和注意事项,如接收模块的上拉电阻设置、学习模式的按键防抖处理等。 适合人群:具有一定单片机开发经验的技术人员,尤其是对无线遥控解码感兴趣的开发者。 使用场景及目标:适用于需要将传统2262/1527编码遥控器集成到智能家居系统或其他自动化控制系统中的场合。主要目标是提供一种低成本、高性能的解决方案,能够稳定可靠地解码并响应多种类型的遥控信号。 其他说明:文中提供了完整的代码片段和技术细节,帮助读者更好地理解和实现相关功能。此外,作者还提到了一些常见的陷阱和优化建议,有助于提高系统的稳定性和兼容性。