小编Rag*_*ghu的帖子

Java Concurrency JDK 1.6:忙碌等待比信令好吗?有效的Java#51

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)

java concurrency multithreading synchronization

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

ModelBinding:MVC4/C中的POST数据(可能来自Ruby)#

我们正在与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

我有什么选择让模型绑定器工作?我能想到以下几点:

  1. 使用委托处理程序挂钩请求,读取req主体并将[]替换为点(.).然而,这至少让人感到有点冒险
  2. 编写一个可以使用的自定义模型绑定器[]- 希望能够以某种方式委托给默认处理程序.不知道如何解决这个问题 - 但很想听到一些想法.
  3. 只需formcollection在Action中使用一个参数.处理表单集合键以基于键形成递归字典.这也意味着我必须处理整个字符串(日期,ids等等)

什么是最好的方式,我该如何去做.

c# http-post model-binding asp.net-mvc-4

5
推荐指数
1
解决办法
509
查看次数

vimscript:获取映射中的视觉​​模式选择文本

所以我试图有一个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/没有成功(将选择复制到注册) - 从我的绑定调用时出错。

vim

5
推荐指数
1
解决办法
2670
查看次数

未加载Spring引导@ConfigurationProperties

正如标题所示,我正在尝试使用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)

java spring configurationproperty spring-boot

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

Maven reactor:使用Spring boot starter pom的pom

我有一个包含多个模块的项目.其中一些使用弹簧靴,另一些是没有任何弹簧依赖的普通罐.所以我为每个模块设置了父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]

spring maven maven-reactor spring-boot

3
推荐指数
1
解决办法
1511
查看次数