Java中volatile和synchronized的区别

我想知道区别声明一个variables为volatile并总是访问Java中的synchronized(this)块(尤其是J2ME)中的variables? 根据这篇文章http://www.javamex.com/tutorials/synchronization_volatile.shtml有很多可以说,有很多的差异,但也有一些相似之处。 我对这条信息特别感兴趣: … 访问一个volatilevariables永远不会有阻塞的可能性:我们只做过一个简单的读或写操作,所以与synchronized块不同,我们永远不会锁住任何锁; 因为访问一个volatilevariables永远不会拥有一个锁,所以它不适合我们想要读取更新 – 写入为primefaces操作的情况(除非我们准备“错过更新”); 他们是什么意思阅读更新写 ? 不写也是一个更新,或者他们只是意味着更新是依赖于读取信息的写入? 最重要的是,何时声明variablesvolatile比通过synchronized访问variables更合适? 对依赖于input的variables使用volatile是一个好主意吗? 例如,有一个variables叫render ,通过渲染循环读取并通过按键事件设置?

如何在ImageView中缩放图像以保持宽高比

在Android中,我将ImageView的layout_width定义为fill_parent (占用了手机的全部宽度)。 如果我放入ImageView的图片大于layout_width ,Android会缩放它,对不对? 但是身高呢? 当Android缩放图像时,它会保持高宽比吗? 我发现当Android缩放大于ImageView的图像时, ImageView的顶部和底部会有一些空白。 真的吗? 如果是的话,我怎样才能消除这个空白?

在Java中将“ArrayList <String>转换为”String “

我怎样才能将一个ArrayList<String>对象转换为Java中的String[]数组?

你如何按价值sorting词典?

我经常不得不按照价值来整理由键和值组成的字典。 例如,我有一个单词和各自的频率散列,我想按频率sorting。 有一个SortedList对单个值(比如说频率)很有用,我想把它映射回单词。 SortedDictionary按键sorting ,不是值。 有人诉诸自定义课程 ,但有一个更清洁的方式?

独特()与lambda?

对,所以我有一个枚举,并希望从它得到不同的价值。 使用System.Linq ,当然有一个名为Distinct的扩展方法。 在简单情况下,它可以使用没有参数,如: var distinctValues = myStringList.Distinct(); 那么好,但如果我有我需要指定相等的对象的枚举,唯一可用的重载是: var distinctValues = myCustomerList.Distinct(someEqualityComparer); 相等比较器参数必须是IEqualityComparer<T>一个实例。 当然,我可以做到这一点,但是有点冗长,而且很有趣。 我所期望的是一个需要lambda的重载,比如Func <T,T,bool>: var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId); 任何人都知道,如果这样的扩展存在,或一些等效的解决方法? 还是我错过了什么? 另外,有没有一种方法来指定一个IEqualityComparer内联(不容我)? 更新 我发现Anders Hejlsberg在MSDN论坛上发布了一个关于这个主题的post。 他说: 你将遇到的问题是,当两个对象比较相等时,它们必须具有相同的GetHashCode返回值(否则Distinct内部使用的哈希表将无法正常工作)。 我们使用IEqualityComparer,因为它将Equals和GetHashCode的兼容实现打包到一个接口中。 我想这是有道理的..

如何在Java中为Android设置HttpResponse超时

我已经创build了以下函数来检查连接状态: private void checkConnectionStatus() { HttpClient httpClient = new DefaultHttpClient(); try { String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/" + strSessionString + "/ConnectionStatus"; Log.d("phobos", "performing get " + url); HttpGet method = new HttpGet(new URI(url)); HttpResponse response = httpClient.execute(method); if (response != null) { String result = getResponse(response.getEntity()); … 当我closures服务器进行testing时,执行等待很长时间 HttpResponse response = httpClient.execute(method); 有谁知道如何设置超时,以避免等待太久? 谢谢!

SQL Server中的临时表和表variables有什么区别?

在SQL Server 2005中,我们可以通过两种方式创build临时表: declare @tmp table (Col1 int, Col2 int); 要么 create table #tmp (Col1 int, Col2 int); 这两者有什么区别? 对于@tmp是否仍然使用tempdb,或者内存中是否发生任何事情,我都读过了相互冲突的意见。 在哪种情况下,一个performance优于另一个?

获取exception“IllegalStateException:不能执行此操作后onSaveInstanceState”

我有一个活的Android应用程序,从市场上我收到以下堆栈跟踪,我不知道为什么它发生的应用程序代码中没有发生,但它由应用程序中的某些或其他事件引起(假设) 我不使用片段,仍然有一个FragmentManager的参考。 如果任何机构可以对一些隐藏的事实提出一些疑问,以避免这种types的问题: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyDown(Activity.java:1962) at android.view.KeyEvent.dispatch(KeyEvent.java:2482) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1720) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1258) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668) at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2851) at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2824) at android.view.ViewRoot.handleMessage(ViewRoot.java:2011) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:132) […]

链接并执行GitHub上托pipe的外部JavaScript文件

当我尝试将本地JavaScript文件的链接引用更改为GitHub原始版本时,我的testing文件停止工作。 错误是: 由于其MIMEtypes( text/plain )不可执行,因此拒绝执行脚本,并且启用严格的MIMEtypes检查。 有没有办法来禁用这种行为,或者有一个服务,允许链接到GitHub原始文件? 工作代码: <script src="bootstrap-wysiwyg.js"></script> 非工作代码: <script src="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js"></script>

当你在malloc之后没有自由时真的会发生什么?

这已经困扰了我很多年了。 我们都在学校教书(至less,我是),你必须释放每一个分配的指针。 不过,对于没有释放内存的真正代价,我有些好奇。 在一些明显的情况下,例如malloc在循环或线程执行的一部分中被调用时,释放非常重要,所以没有内存泄漏。 但是请考虑以下两个示例: 首先,如果我有这样的代码: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } 这里真正的结果是什么? 我的想法是,这个过程死了,然后堆空间已经消失了,所以没有任何伤害,错过了free的呼吁(但是,我确实认识到无论如何,closures,可维护性和良好的做法的重要性)。 我对这个想法是否正确? 其次,让我们说我有一个程序,有点像一个壳。 用户可以声明像aaa = 123这样的variables,并将这些variables存储在某些dynamic数据结构中供以后使用。 很显然,你会使用一些解决scheme来调用一些* alloc函数(hashmap,链表,类似的东西)。 对于这种types的程序,在调用malloc之后永远不会释放,因为这些variables必须在程序执行期间一直存在,并且没有什么好的方法(我可以看到)使用静态分配的空间来实现这一点。 有一堆分配的内存,但只作为过程结束的一部分被释放,这是不好的devise吗? 如果是的话,还有什么select?