﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-温少的日志-最新评论</title><link>http://www.cnblogs.com/jobs/CommentsRSS.aspx</link><description>我希望我所作的事情对别人有所帮助！</description><language>zh-cn</language><pubDate>Thu, 02 Dec 2010 13:05:59 GMT</pubDate><lastBuildDate>Thu, 02 Dec 2010 13:05:59 GMT</lastBuildDate><generator>cnblogs</generator><item><title>Re:不要奢望.NET能够跨平台</title><link>http://www.cnblogs.com/jobs/archive/2010/12/09/724586.html#1982564</link><dc:creator>晓鹏</dc:creator><author>晓鹏</author><pubDate>Thu, 09 Dec 2010 07:08:30 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/12/09/724586.html#1982564</guid><description><![CDATA[@风哥
经典！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">晓鹏</a> 2010-12-09 15:08 <a href="http://www.cnblogs.com/jobs/archive/2010/12/09/724586.html#1982564#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/11/11/1788156.html#1957931</link><dc:creator>温少</dc:creator><author>温少</author><pubDate>Wed, 10 Nov 2010 16:12:25 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/11/11/1788156.html#1957931</guid><description><![CDATA[@synchronized
你说的是对的，3楼的例子有问题，notifyAll是不对的，应该notify才对。最近很忙，很少上来，所以回复慢了，抱歉 :)<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">温少</a> 2010-11-11 00:12 <a href="http://www.cnblogs.com/jobs/archive/2010/11/11/1788156.html#1957931#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:linux下工作的感受</title><link>http://www.cnblogs.com/jobs/archive/2010/09/14/538989.html#1916598</link><dc:creator>egmkang</dc:creator><author>egmkang</author><pubDate>Tue, 14 Sep 2010 11:56:09 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/14/538989.html#1916598</guid><description><![CDATA[因为你用的是Ubuntu,这种半年一发行的办法,肯定不稳定了
要不你去试一试Debian/FreeBSD??<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">egmkang</a> 2010-09-14 19:56 <a href="http://www.cnblogs.com/jobs/archive/2010/09/14/538989.html#1916598#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/11/1788156.html#1914522</link><dc:creator>synchronized</dc:creator><author>synchronized</author><pubDate>Sat, 11 Sep 2010 15:48:54 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/11/1788156.html#1914522</guid><description><![CDATA[3楼的例子没问题是指不会返回null，还是返回null是允许的？
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">synchronized</a> 2010-09-11 23:48 <a href="http://www.cnblogs.com/jobs/archive/2010/09/11/1788156.html#1914522#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912033</link><dc:creator>温少</dc:creator><author>温少</author><pubDate>Wed, 08 Sep 2010 17:53:25 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912033</guid><description><![CDATA[@synchronized
3楼的例子没问题
4楼的例子的在你说的情况确会出现死锁，这个例子只是用来说明为什么需要用Lock、condition。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">温少</a> 2010-09-09 01:53 <a href="http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912033#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912032</link><dc:creator>温少</dc:creator><author>温少</author><pubDate>Wed, 08 Sep 2010 17:47:59 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912032</guid><description><![CDATA[@synchronized
1、你说的BeanManager的情况，一般是采用Proxy类来解决。
2、CopyOnWriteArrayList虽然是修改的时候速度不快，但是读取没有任何额外的开销。
3、TimerWheel是需要指定一个固定的时间精度的
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">温少</a> 2010-09-09 01:47 <a href="http://www.cnblogs.com/jobs/archive/2010/09/09/1788156.html#1912032#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911071</link><dc:creator>synchronized</dc:creator><author>synchronized</author><pubDate>Tue, 07 Sep 2010 23:40:41 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911071</guid><description><![CDATA[此外，在你的例子中，还有一些值得探讨的话题，
比如说BeanManager这个例子中，如果createBean是一个比较耗时的操作，在同步快里执行效率低或者用putIfAbsent会产生重复的调用，该怎么解决？
CopyOnWriteArrayList用于Listeners时每次add都创建新的数组，是否有此必要？

ScheduledExecutorService的实现比较适合精确定时，但它的remove方法是简单遍历的，这对它适用的场合就有了很大的限制。而TimerWheel的算法是否能适合精确定时？这两种算法如何比较？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">synchronized</a> 2010-09-08 07:40 <a href="http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911071#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911064</link><dc:creator>synchronized</dc:creator><author>synchronized</author><pubDate>Tue, 07 Sep 2010 23:17:36 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911064</guid><description><![CDATA[在“实现一个简单的阻塞队列(3)”这个例子中同样会出现take返回null的问题<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">synchronized</a> 2010-09-08 07:17 <a href="http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911064#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911061</link><dc:creator>synchronized</dc:creator><author>synchronized</author><pubDate>Tue, 07 Sep 2010 23:06:11 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911061</guid><description><![CDATA[[code=java]
public class BlockingQ
{
    private Object notEmpty = new Object();
    private Object notFull = new Object();
    private Queue&lt;Object&gt; linkedList = new LinkedList&lt;Object&gt;();
    private int maxLength = 10;
    public Object take() throws InterruptedException
    {
        synchronized (notEmpty)
        {
            if (linkedList.size() == 0)
            {
                notEmpty.wait();
            }
            synchronized (notFull)
            {
                if (linkedList.size() == maxLength)
                {
                    notFull.notifyAll();
                }
                return linkedList.poll();
            }
        }
    }
    public void offer(Object object) throws InterruptedException
    {
        synchronized (notEmpty)
        {
            if (linkedList.size() == 0)
            {
                notEmpty.notifyAll();
            }
            synchronized (notFull)
            {
                if (linkedList.size() == maxLength)
                {
                    notFull.wait();
                }
                linkedList.add(object);
            }
        }
    }
}

[/code]
在这个例子中，如果offer时linkedList.size()==maxLength,进入notFull.wait,它只释放了notFull的同步锁，并未释放notEmpty的同步锁。在它退出之前，所有其他线程调用take和offer都会产生死锁。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">synchronized</a> 2010-09-08 07:06 <a href="http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911061#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:新写了一个Java并发程序设计教程</title><link>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911057</link><dc:creator>synchronized</dc:creator><author>synchronized</author><pubDate>Tue, 07 Sep 2010 22:54:08 GMT</pubDate><guid>http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911057</guid><description><![CDATA[cocurrent编程要比synchronized编程门槛要高一些，本人还是对大家是否能够用好并发编程有一些忧虑，希望通过更多的实践能搞逐渐提高大家的编程水平。
[code=java]
public class classBlockingQ
{
    private Object notEmpty= new Object();
    private Queue&lt;Object&gt; linkedList= new LinkedList&lt;Object&gt;();
    public Object take() throws InterruptedException
    {
        synchronized(notEmpty) 
        {
            if(linkedList.size() == 0) 
            {
                notEmpty.wait();
            }
            return linkedList.poll();
        }
    }
    public void offer(Object object) 
    {
        synchronized(notEmpty) 
        {
            if(linkedList.size() == 0) 
            {
                notEmpty.notifyAll();
            }
            linkedList.add(object);
        }
    }
}

[/code]
在这个例子中，如果先有两个线程调用take，并进入wait状态，然后第三个线程调用offer，会有什么样的结果？将有一个take()返回null,是否是设计期望的？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/jobs/" target="_blank">synchronized</a> 2010-09-08 06:54 <a href="http://www.cnblogs.com/jobs/archive/2010/09/08/1788156.html#1911057#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>
