我有一个由多个线程访问的List对象.主要有一个线程,在某些情况下有两个线程,用于更新列表.根据正在处理的用户请求数,有一到五个可以从此列表中读取的线程.该列表不是要执行的任务队列,它是正在检索和同时更新的域对象的列表.
现在有几种方法可以访问此列表的线程安全:
-use synchronized block
-use normal Lock(即读写操作共享相同的锁)
-use ReadWriteLock
-use一个新的ConcurrentBLABLBA集合类
我的问题:
什么是最佳使用方法,因为cricital部分通常不包含大量操作(主要是添加/删除/插入或从列表中获取元素)?
你能推荐另一种方法,上面未列出吗?
一些约束 - 最佳
性能至关重要,内存使用量不是很多
- 必须是有序列表(当前在ArrayList上同步),尽管不是排序列表(即不使用Comparable或Comparator排序,而是根据插入顺序排序)
- list会很大,包含多达100000个域对象,因此使用类似CopyOnWriteArrayList的东西是不可行的
- 写入/更新电路部分通常非常快,做简单的添加/删除/插入或替换(设置)
- 读取操作将主要执行一个elementAt(索引)调用大部分时间,虽然一些读操作可能会进行二分查找,或indexOf(元素)
- 虽然像indexOf(..)之类的操作将遍历列表,但不会对列表进行直接迭代
我在Python中使用了getopt,希望在Java中有类似的东西.
请说明为什么你的答案比其他人好.
有很多关于IPv6以及即将从IPv4切换到IPv6的新闻.我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发和设计有多大影响(特别是)?
是否有一些我们今天还没有提供的有形/众所周知的好处?
我知道Windows Vista和Server 2008支持开箱即用的IPv6,今天是否有人使用(或设计使用IPv6),如果是这样,有什么好处?我们是否应该在当前和未来的项目中考虑IPv6?
是否有任何关于IPv6感知应用程序的好例子?
我正在使用Eclipse 3.3("Europa").Eclipse定期启动时间过长(可能永远).我在Eclipse日志中唯一能看到的是:
!ENTRY org.eclipse.core.resources 2 10035 2008-10-16 09:47:34.801
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
谷歌搜索显示某人建议我删除该文件夹:
workspace\.metadata\.plugins\org.eclipse.core.resources\.root\.indexes
Run Code Online (Sandbox Code Playgroud)
这似乎没有帮助.
没有从一个新的工作区开始(我不想做的事情,因为我需要花费几个小时才能再次正确地设置我的所有项目),有没有办法让Eclipse正常启动?
如何获得*nix命令" ps " 的全宽结果?
我知道我们可以指定类似的东西,--cols 1000但无论如何我可以在列中打印出所有内容吗?
我想创建一个具有两个内容区域的Silverlight 2控件.标题和主要内容.所以控制将是:
<StackPanel>
<TextBlock Text=" CONTENT1 "/>
<Content with CONTENT2 "/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
当我使用控件时我应该能够使用:
<MyControl Text="somecontent">main content </MyControl>
Run Code Online (Sandbox Code Playgroud)
我该如何创建这样的控件?
在SQL数据库中使用TEXT比使用varchar效率低吗?
如果是这样的话?
如果没有,你为什么不总是使用TEXT?
我不是在这里针对特定的数据库,但oracle可能是最相关的,尽管我正在测试MySQL暂时作为概念证明的一部分.
我需要在perl文档中使用utf-8字符.如果我使用:
perldoc MyMod.pm
Run Code Online (Sandbox Code Playgroud)
我看到奇怪的人物.如果我使用:
pod2text MyMod.pm
Run Code Online (Sandbox Code Playgroud)
一切都好.
我使用Ubuntu/Debian.
$ locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8
Run Code Online (Sandbox Code Playgroud)
是否有关于在Pod中使用特殊字符的方法?
这是一个使用德国变音符号"Just a Test:äöüßÄÖ"的小例子:
$ perldoc perl/MyMod.pm
<standard input>:72: warning: can't find character with input code 159
<standard input>:72: warning: can't find character with input code 150
MyMod(3) User Contributed Perl Documentation MyMod(3)
NAME
MyMod.pm - Just a Test: äöüÃÃÃ
perl v5.10.0 2008-10-16 MyMod(3)
Run Code Online (Sandbox Code Playgroud) 我有以下代码设置cookie:
string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
HttpCookie cookie = new HttpCookie("localization",locale);
cookie.Expires= DateTime.Now.AddYears(1);
Response.Cookies.Set(cookie);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试读取cookie时,Value为Null.cookie存在.如果检查我永远不会超过以下:
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))
Run Code Online (Sandbox Code Playgroud)
救命?
我有一个对话框,其中包含一个Qt TabWidget,其中添加了许多选项卡.
我想隐藏其中一个标签.
_mytab->hide()
Run Code Online (Sandbox Code Playgroud)
不起作用.我不想只是从.ui文件中删除选项卡及其所有小部件,因为其他代码依赖于选项卡中的小部件.但是,生成选项卡代码会很好,但在生成的uic_mydialog.cpp中不会显示:: insertTab.在ui文件中设置hidden属性也不起作用.
我正在使用Qt 3.3
java ×3
command-line ×2
asp.net ×1
c# ×1
c++ ×1
collections ×1
concurrency ×1
cookies ×1
eclipse ×1
eclipse-3.3 ×1
ipv6 ×1
linux ×1
performance ×1
perl ×1
perldoc ×1
process ×1
ps ×1
qt ×1
silverlight ×1
sql ×1
unicode ×1
unix ×1
variables ×1