Wait/notify/notifyAll and Condition.await/signal/signalAll are the communicating way between threads while Synchronized/Lock(ReentrantLock/ReentrantReadWriteLock) is synchronization mechanism. For JDK1.5, Lock mechanism can provide better performance than traditional synchronized mechanism. For JDK1.6 or above,there is tiny difference between both in performance. You're supposed to have a thorough grasp of these basic concept of muti-thread before you start to design the multi-thread programming.
Would you please help me answer this question mentioned in this post? http://bbs.csdn.net/topics/390682414
至于其他方式,坐等大神回答。
干不掉可以弄个什么存储过程什么什么的,或去本地执行。
这个也办不到,就只好像分页一样一段一段取,回来拼在一起,3秒能够取回来。或者排序取,到那条断了下次继续从哪里开始。
2、同步这个,concurrent包里面有lock的方式,不过我看作者并不是特别推荐随意使用那东西。
这个之外,其实,你还可以借助RandomAccessFile中的文件锁或者数据库中的行锁或表锁实现同步。
线程同步和并发是有区别的。我想你还没有搞懂。myblog
如果只是想让线程顺序执行某个方法,比如
原方法public synchronized void method1(){
//do something here
}使用lockprivate final ReentrantLock lock = new ReentrantLock();
public void mehtod1(){
lock.lock();
try{
//do something here
}finally{
lock.unlock();
}}
还有一种可能是为了缓存数据并发性更好,比如某个类中有一个数据集用于做缓存的,为了让读写性能更佳(原方法不举例,因为不试过)
class RWDictionary {
//缓存集合 m
private final Map<String, Data> m = new TreeMap<String, Data>();
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
//读取锁,多个线程可以同时获取该锁
private final Lock r = rwl.readLock();
//写入锁,当写入锁被获取后,之后的读取乐和写入锁都得等待当前写入锁释放
private final Lock w = rwl.writeLock(); public Data get(String key) {
r.lock();
try { return m.get(key); }
finally { r.unlock(); }
}
public String[] allKeys() {
r.lock();
try { return m.keySet().toArray(); }
finally { r.unlock(); }
}
public Data put(String key, Data value) {
w.lock();
try { return m.put(key, value); }
finally { w.unlock(); }
}
public void clear() {
w.lock();
try { m.clear(); }
finally { w.unlock(); }
}
}另外想跟楼主讨论讨论线程同步的做用。
线程同步极大的可能是为了数据的一至性,而一至性就很有可能会涉及系统的并发性能。
所以了解线程同步再试着了解一下并发方面的知识会有相互了解的做用。
1 synchronized 初学最方便
2 lock 要点经验
3 volatile 变量关键字
access shared resource
flag = true;详见经典的Peterson算法。
For JDK1.5, Lock mechanism can provide better performance than traditional synchronized mechanism.
For JDK1.6 or above,there is tiny difference between both in performance. You're supposed to have a thorough grasp of these basic concept of muti-thread before you start to design the multi-thread programming.
Would you please help me answer this question mentioned in this post?
http://bbs.csdn.net/topics/390682414
synchronized耗时在10ns级别,不是synchronized慢,而是synchronized块里做了什么,一般内存运算没问题,要是涉及IO就可能不对了。
concurrent包里有很多高级的东西,不推荐用,一般业务开发也用不到,除非写框架。我的soa框架倒是把concurrent里的东西用了个遍。
PS:博客内容是由原来的csdn导入进去的,代码格式有些许处理不当,不过应该不影响阅读……
所谓的标志同步, 简单采用 CAS 进行与或非置换就行了..Win平台就是InterlockCompareExchange.
JAVA不知道有没有保留这些基础函数, 有的话用这种最节省时间, 时间是CPU级别的, 不是系统级别的.
数据库的问题上, 先执行一条存储过程把数据库的2000万查出来写入N个临时表, 然后每3秒断线一次的情况下, 每3秒拿一个表回来, 然后组合起来不就2000万的数据了么...断线多少遍都行, 只是速度问题.