- 浏览: 700780 次
- 性别:
- 来自: 北京
最新评论
-
orangebook:
对于初学者来说,这样编写可能会误导,理解更烦锁。
观察者模式(发布-订阅) -
liudajiang:
呵呵 startThreads(rand ...
实践缩小Java synchronized 粒度 -
zengwenbo5566:
谢谢博主,学习了
解决getOutputStream() has already been called for this response -
u011335423:
大神厉害啊 可以了
解决getOutputStream() has already been called for this response -
xiang37:
...
解决getOutputStream() has already been called for this response
文章列表
类定义:
public class Test{
public synchronized method1(){...}
public synchronized method2(){...}
}
问题:
多线程并发访问method1和method2时,两者会互斥吗?
下面的测试程序来回答这个问题。
public class TestSynchronizedMethod {
private void ivkMethod1(){
Thread thread1 = new Thread() {
public void run() ...
根据用户需求,将公司产品部署到win32 websphere上。部署过程中,报OOM错误。
使用IBM工具分析javacore文件后,得到详细的分析,如下是部分信息:
1.==================================================================================
Cause of thread du ...
项目需求:
产品需要监视不同种类的多个数据库,例如:多个mysql库,多个oracle库,多个sybase库,多个msserver库等等,连接池需要根据客户数据库种类和数量的实际情况进行动态创建。
难点:
1.每个库创建一个连接池,不能重复创建。
2.每个连接池维护自身的线程安全性,访问每个连接池的线程单独排队,相互之间不能影响。
实现思路:
将每个库的连接池实例保存到一个static Map中,key为库路径,value为连接池对象。如果对象已经存在,则不再创建,直接获取。
Map的read-write的组合操作,需要线程安全控制。
Java对多线程的支持与同步机制深受大家的喜爱,通过JMM可以了解到几个涉及多线程编程的几个关键字:
synchronized、final、volatile。
一、作用
1.synchronized
1.1 synchronized优点:
正确使用synchronized可以解决data race问题,同时保证了变量的可见性;
1.2 synchronized缺点:
synchronized作用范围内线程的串行化执行,在一定程度上降低了程序的并发性;对性能要求严格的情况下,尽量减小synchronized的作用范围,依赖于对synchronized的作用范围进行细致地分析 ...
Heap OOM故障实例1
- 博客分类:
- 故障处理及调优
故障描述:
线上系统运行过程中出现OOM异常,导致jvm crash。
系统运行在IBM AIX上,通过IBM heap工具分析得到结果,如下图所示:
java应用日志分析:
1.通过查看应用日志,发现在某个时间点jvm heap内存出现异常:内存使用不断上升直至溢出。
2.由于系统特性使然,heap内存分配为64M,通过上图可以发现,异常时mina框架的MessageWriteRequest对象已经占用了61M左右的heap,导致溢出。
故障分析:
通过跟踪mina源程序,发现是由于大量消息阻塞的消息queue中,无法发送也没有及时清除,最终导致heap内存溢 ...
常用linux命令_1
- 博客分类:
- OS
1.权限赋予执行权限chmod +x *.sh --赋操作文件夹权限chmod -R 755 tomcat2.查看linux版本cat /etc/issue3.启动memcached./memcached -d -m 2048 -u root -p 11211关闭kill 4.查看端口情况4-1 查看CLOSE_WAIT端口netstat -an | grep CLOSE_WAIT 4-2 查看端口被什么程序占用 ...
项目由于数据量较大,采用了对mysql进行了水平扩展的方式来支撑大数据量的存储、访问和负载均衡。这篇文字主要总结了一下已在线上运行的数据访问层,并在此基础上对逻辑架构进行一些补充和完善,有些是个人的设想,欢迎有经验的朋友批评指正,谢谢。
设计简介:
1. router 负责sql路由和过滤
1.1 app sql router: 负责应用对数据库操作的路由。
1.2 sql statistics center: 负责对整个系统中所有sql的统计。
2. Hot manager 负责sql热点的监视和分析
2.1 sql monitor : 负责sql监视(过滤 ...
项目中有很多异步、定时及周期性任务的需求,其实现有一定的特点,汇总以备忘。
简单分析:
结构分析:
1.Task属性包含处理任务的完整类名、任务处理的参数、延迟的时间(毫秒)、执行的周期间隔(毫秒)。1.1 任务的完整类名执行任务时,可以根据处理任务的完整类名,利用反射机制生成任务类的实例1.2 任务处理的参数执行任务时,可以从该参数中获取相关的参数值。
2.TaskThread实现了接口Runnable,并且包含了当前线程要执行的任务对象。用户自定义任务类需要extends该类。
3.TaskManager任务管理器包含了任务队列,访问任务队列的线程,并 ...
Thread_跨节点集合查询
- 博客分类:
- java apps
项目中数据库进行了水平切分,为了处理跨节点集合查询,采用了多线程并发操作的方式来处理,并且对各线程执行的结果进行操作,如果是返回结果集,则合并排序;如果是聚合操作,则求和。个人觉得该实现方式很有代表性,所以抽取了原型实现备忘。
集合处理:
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
/**
* 集合查询
*
* 场景: 数据 ...
java应用中通常会有处理大批量数据的场景,这里介绍一种分页处理的方式,仅供参考。
大批量数据通常不能一次读取或者写入,因为一次读取会消耗过多的内存,一次写入会长时间占用DB连接,
我的思路是参照分页查询的模式缩小每次操作的数据集,循环执行,直到处理完毕。
两种实现方式:
1.采用单线程模式顺序执行。
每次读取固定大小的数据记录,然后插入到存储设备。
2.采用多线程模式。
1个线程读取,另1个线程负责处理数据。
读写并发执行,一定程度上提高了功能的吞吐量和CPU的利用率。
具体实现:
1. 采用固定大小的队列来存储分页数据;
2. 队列满了,则开始执行 ...
wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。
这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。
•如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。
•如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。
•如果对象调用了notifyAll方法就会通知所有等待这个对象控制权的线程继续运行。
其中wait方法有三个over load方法:
wait()
wait(long)
wait(long,i ...
TCP close_wait内幕
- 博客分类:
- 故障处理及调优
最近遇到的一个关于socket.close的问题,在某个应用服务器出现的状况(执行netstat -np | grep tcp):
tcp 0 0 10.224.122.16:50158 10.224.112.58:8788 CLOSE_WAIT
tcp 0 0 10.224.122.16:37655 10.224.112.58:8788 CLOSE_WAIT
tcp 1 0 127.0.0.1:32713 127.0.0.1 ...
使用mysql的系统中常见的sql错误:
1.事务中某些表是非innodb类型。
SQLWarning ignored:
SQL state 'HY000', error code '1592',
message [Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessin ...
开发管理工作教训总结
- 博客分类:
- 软件开发过程及管理
今年参与了一个在线教育网站的项目,规划承载1000W用户,一期上线用户80W。我有幸负责其中分布式会话开发和数据访问层(DAL)的开发及管理工作,项目已到上线阶段,突然有感触一路走来的一些经验及教训,不好意思,教训居多。
数据访问层由我负责主导,开发工作由另一位同事负责。由于手头事务繁杂,没有太多时间来对这块的工作进行细致的管理,只做到了对关键功能点的设计思路及实现难点的掌握和主导,但是还有一些地方做的不够,例如:细节代码的review,对细节设计不太合理的地方没有及时提出修改意见,并监督执行等等一些问题,导致在该同事离开以后发现对DAL的一些细节的设计不是很清楚,花了一段时间才了解 ...
1. 通过jstatd启动RMI服务
配置java安全访问,将如下的代码存为文件
jstatd.all.policy,放到JAVA_HOME/bin中,其内容如下,
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
执行命令:
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi ...