问题列表 - 第49129页

Java多线程原子引用赋值

我有一个缓存,我使用simeple HashMap实现.喜欢 -

HashMap<String,String> cache = new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)

大多数时候使用此缓存来从中读取值.我有另一个方法重新加载缓存,在这个方法内部我基本上创建一个新的缓存,然后分配引用.据我所知,对象引用的赋值是Java中的Atomic.

public class myClass {
     private HashMap<String,String> cache = null;
    public void init() {
       refreshCache();
    }
    // this method can be called occasionally to update the cache.
    public void refreshCache() {
        HashMap<String,String> newcache = new HashMap<String,String>();
       // code to fill up the new cache
       // and then finally
       cache = newcache; //assign the old cache to the new one in Atomic way
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解如果我不将缓存声明为volatile,其他线程将无法看到更改,但对于我的用例将缓存中的更改传播到其他线程并且它们可以继续使用旧缓存并不是时间关键延长时间.

你看到任何线程问题吗?考虑到许多线程正在从缓存中读取,并且有时只重新加载缓存.

编辑 - 我的主要困惑是我不必在这里使用AtomicReference,因为赋值操作本身是原子的?

编辑 - 我理解为了使顺序正确,我应该将缓存标记为volatile.但是如果refreshCache方法被标记为synchronized,我不必将缓存设置为volatile,因为Synchronized块将负责排序和可见性?

java multithreading

18
推荐指数
1
解决办法
9057
查看次数

如何检测0长度UDP数据报的接收

我正在考虑编写/实现一个基于UDP的协议,该协议将使用零长度数据报作为"hello"消息.虽然我不希望发送零长度数据报有问题,但我不确定我能收到一个.

recvfrom返回读取的字节数,但0保留用于有序关闭.

read返回读取的字节数,但为EOF保留0.

选择 "将观看人物是否可以阅读".

如何检测零长度数据报的接收?

c sockets udp

10
推荐指数
1
解决办法
4739
查看次数

如何将<%= link_to"Upgrade",:settings,:class =>"button"%>转换为Rails 3中的块?

我想产生这个链接:

<a href="/settings" class="button"><span class="magnifier icon"></span>Search</a>
Run Code Online (Sandbox Code Playgroud)

所以据我所知,我必须转换

<%= link_to "Upgrade", :settings, :class => "button" %>
Run Code Online (Sandbox Code Playgroud)

到了一个区块,但当我这样做时:

<%= link_to "Upgrade", :settings, :class => "button" do %>
   <span class="magnifier icon">Search</span>
<% end %>
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

undefined method `stringify_keys' for :settings:Symbol
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:<%= link_to "Upgrade", :settings, :class => "button" %>它完美无缺.

如何将其转换为块?

ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
1465
查看次数

Linux和Windows下的boost :: filesystem和Unicode

以下程序在Windows下的Visual Studio 2008中编译,包括字符集"使用Unicode字符集"和"使用多字节字符集".但是,它不能在Ubuntu 10.04.2 LTS 64位和GCC 4.4.3下编译.我在两种环境下使用Boost 1.46.1.

#include <boost/filesystem/path.hpp>
#include <iostream>

int main() {
  boost::filesystem::path p(L"/test/test2");
  std::wcout << p.native() << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Linux下的编译错误是:

test.cpp:6:错误:'std :: wcout << p.boost :: filesystem3 :: path :: native()'中'operator <<'不匹配

在我看来,Linux下的boost :: filesystem在path :: native()中没有提供宽字符串,尽管boost :: filesystem :: path已经用宽字符串初始化了.此外,我猜这是因为Linux默认为UTF-8,Windows默认为UTF-16.

所以我的第一个问题是,如何在两个平台上编写一个使用boost :: filesystem并支持Unicode路径的程序?

第二个问题:当我在Windows下运行该程序时,它输出:

/test/test2
Run Code Online (Sandbox Code Playgroud)

我的理解是native()方法应该在Windows下将路径转换为本机格式,它使用反斜杠而不是正斜杠.为什么字符串以POSIX格式出现?

linux windows filesystems unicode boost

9
推荐指数
1
解决办法
4693
查看次数

template <typename T>和template <class T>之间有什么区别.对我来说,两者都产生了相同的结果

template <typename T> 和之间的区别是什么template <class T>.对我来说,两者都产生了相同的结果.

例如

template <class T>
T Average(T *atArray, int nNumValues)
{
    T tSum = 0;
    for (int nCount=0; nCount < nNumValues; nCount++)
        tSum += atArray[nCount];

    tSum /= nNumValues;
    return tSum;
}
Run Code Online (Sandbox Code Playgroud)

如果我把它改成它 template <typename T>就是一样的

c++ templates

27
推荐指数
2
解决办法
3万
查看次数

如何在ubuntu上安装jdbc驱动程序?

我正在尝试在ubuntu上安装MS SQL JDBC驱动程序,以与sqoop for Hadoop一起使用。我对Java和Linux完全陌生,所以我不确定将所有内容提取到哪里。

java install hadoop jdbc sqoop

2
推荐指数
1
解决办法
2万
查看次数

如何在Xcode4中选择调试/释放模式?

今天,我意识到Xcode4中没有调试/发布模式选择器.这是怎么回事?

xcode4 xcode3to4

12
推荐指数
0
解决办法
1万
查看次数

PHP HTTP推荐人

我有一个页面接受来自远程站点的POST.我想检测这些POST来自哪个域.我意识到它可以被欺骗,但它总比没有好.我试过访问HTTP_REFERER变量,但它只返回null.

该页面接受来自PayPal(即时付款通知)和其他支付网关等来源的POST.

我如何获得推荐电话?

php post referrer

8
推荐指数
2
解决办法
2万
查看次数

关于乐观锁定的基本问题(Hibernate)

我是新手使用"乐观锁定"机制 - 我使用的是hibernate(在Jboss中)和容器管理事务(CMT).我想在我的实体读取实体更新之间处理这种情况,其他人在DB中更新同一个实体(即行).在这种情况下,我想抛出异常..

我用@Version注释了我的实体 - 就像

@Version
private Long version;
Run Code Online (Sandbox Code Playgroud)

现在,我很困惑,如果这对于版本管理来说已经足够了,或者我需要显式调用EntityManager.lock()api之类的

  {
    .
    .
    final QueryDTO queryDTO = entityManager.find(QueryDTO.class, id);
    entityManager.lock(queryDTO, LockModeType.READ);
    queryDTO.setStatus(updatedStatus);
    entityManager.persist(queryDTO);
  }
Run Code Online (Sandbox Code Playgroud)

提前致谢,

hibernate jpa optimistic-locking

2
推荐指数
1
解决办法
1195
查看次数

39
推荐指数
6
解决办法
23万
查看次数