Joshua Bloch的"Effective Java",第51项不是依赖于线程调度程序,也不是在可运行状态下不必要地保留线程.引用文字:
保持可运行线程数量的主要技术是让每个线程执行少量工作,然后使用Object.wait等待某些条件或使用Thread.sleep等待一段时间.线程不应该忙等待,反复检查数据结构等待发生的事情.除了使程序容易受到调度程序的变幻莫测之外,忙等待还可以大大增加处理器的负载,减少其他进程在同一台机器上可以完成的有用工作量.
然后继续显示忙碌等待的微基准测试与正确使用信号.在书中,忙碌等待执行17次往返/秒,而等待/通知版本每秒执行23,000次往返.
但是,当我在JDK 1.6上尝试相同的基准测试时,我看到恰恰相反 - 忙等待是760K往返/秒,而等待/通知版本是53.3K往返/秒 - 也就是说,等待/通知应该是~1400时间更快,但结果慢了约13倍?
我知道繁忙的等待并不好,信号仍然更好 - 忙等待版本的CPU利用率约为50%,而等待/通知版本的停留率约为30% - 但有没有解释数字的东西?
如果它有帮助,我在Win 7 x64(核心i5)上运行JDK1.6(32位).
更新:来源如下.要运行繁忙的工作台,请将PingPongQueue的基类更改为BusyWorkQueue import java.util.LinkedList; import java.util.List;
abstract class SignalWorkQueue {
private final List queue = new LinkedList();
private boolean stopped = false;
protected SignalWorkQueue() { new WorkerThread().start(); }
public final void enqueue(Object workItem) {
synchronized (queue) {
queue.add(workItem);
queue.notify();
}
}
public final void stop() {
synchronized (queue) {
stopped = true;
queue.notify();
}
}
protected abstract void processItem(Object workItem)
throws …Run Code Online (Sandbox Code Playgroud) 我们正在与chargify http://www.chargify.com集成,我需要在我们的MVC4/C#服务器中处理来自Chargify的webhooks.Chargify以(ruby)方式发送POST数据 - 子对象在方括号中分隔,如下所示:
POST /1ffaj2f1 HTTP/1.1
X-Chargify-Webhook-Signature: 526ccfd9677668674eaa6ba5d447e93a
X-Chargify-Webhook-Id: 11238622
User-Agent: Ruby
Host: requestb.in
Content-Type: application/x-www-form-urlencoded
Content-Length: 5159
Connection: close
Accept-Encoding: gzip, deflate
Accept: */*; q=0.5, application/xml
id=11238622&event=payment_success&payload[subscription][activated_at]=2013-05-22%2001%3A25%3A20%20-0400&payload[subscription][balance_in_cents]=0&...
Run Code Online (Sandbox Code Playgroud)
问题是在.NET端,默认模型绑定器不喜欢方括号[ ],而是期望子对象以点分表示方式分隔a.b.c.d=value
我有什么选择让模型绑定器工作?我能想到以下几点:
[]- 希望能够以某种方式委托给默认处理程序.不知道如何解决这个问题 - 但很想听到一些想法.formcollection在Action中使用一个参数.处理表单集合键以基于键形成递归字典.这也意味着我必须处理整个字符串(日期,ids等等)什么是最好的方式,我该如何去做.
所以我试图有一个lvimgrep在当前选定的文本上运行的绑定。
fun! s:get_visual_selection()
let l=getline("'<")
let [line1,col1] = getpos("'<")[1:2]
let [line2,col2] = getpos("'>")[1:2]
return l[col1 - 1: col2 - 1]
endfun
vnoremap <expr> <script><leader>* ":lvimgrep /" . <SID>get_visual_selection() . "/j **/*." . expand("%:e") . " \|lopen"
Run Code Online (Sandbox Code Playgroud)
该函数来自对问题的评论:How to get visual selected text in VimScript
事情是它的行为非常奇怪:大多数情况下,函数返回的文本与视觉选择不匹配,而且通常是最后一个视觉选择的文本 - 而不是当前的。
已经阅读了大量关于在 vimscript 中获取视觉选择文本的帖子,但无法使其正常工作。
我也试过/sf/answers/107404321/没有成功(将选择复制到注册) - 从我的绑定调用时出错。
正如标题所示,我正在尝试使用Typesafe配置属性来加载DataSourceConfig对象列表.我有用于制定者/吸气者的lombok
主要的应用程序类注释
@Slf4j
@SpringBootApplication
@EnableConfigurationProperties
public class Application {
Run Code Online (Sandbox Code Playgroud)
配置pojo
@Data
public class DataSourceConfig {
private String key;
private String dbname;
private String dbpath;
}
Run Code Online (Sandbox Code Playgroud)
yml文件
tenantdb:
dataSourceConfig:
-
key: default
dbpath: file:eventstore/jdbc/database
dbname: defaultdb
-
key: other
dbpath: file:eventstore/jdbc/other
dbname: dslfjsdf
Run Code Online (Sandbox Code Playgroud)
最后,Spring Configuration类带有@ConfigurationProperties注释.
@Configuration
@Profile("hsqldb")
@ImportResource(value = { "persistence-config.xml" })
@Slf4j
@ConfigurationProperties(prefix="tenantdb", locations={"datasources.yml"})
public class HsqlConfiguration {
private List<DataSourceConfig> dataSourceConfig = new ArrayList<>();
@Bean
public List<DataSourceConfig> getDataSourceConfig() {
return dataSourceConfig;
}
Run Code Online (Sandbox Code Playgroud)
通过上面的配置,我得到:
Caused by: org.springframework.beans.factory.BeanCreationException: …Run Code Online (Sandbox Code Playgroud) 我有一个包含多个模块的项目.其中一些使用弹簧靴,另一些是没有任何弹簧依赖的普通罐.所以我为每个模块设置了父pom.xml.问题在于春季启动项目.
我设置的弹簧引导依赖关系scope=import所列这里 在每年春季启动项目.它是否正确?或者我应该将它移动到我的父POM中?
我遇到的问题1.当我从顶层文件夹运行mvn包时,它不会重新打包spring boot jar.我的春季启动项目列出了其他春季启动依赖项.使用spring boot starter作为父级,他们不需要版本标记.现在他们做了.我已将其定义为我父pom中的属性并添加了版本标签,但想知道这是否更好.
谢谢阅读.
更新对评论#1的回复:我spring-boot-maven-plugin在我的父POM中有以下内容
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.1.9.RELEASE</version>
</plugin>
</plugins>
<pluginManagement>
....
</build>
Run Code Online (Sandbox Code Playgroud)
我也试过mvn spring-boot:repackage在我的春季启动项目中手动运行- 但是错误的出现了:repackage failed: Source must refer to an existing file -> [Help 1]