小编blu*_*Sky的帖子

使用ConcurrentHashMap进行线程安全

我有以下课程.我使用ConcurrentHashMap.我有很多线程写入地图和一个Timer,每5分钟将数据保存在地图中.当我在地图中写入条目时,我设法通过使用putIfAbsent()来实现线程安全.但是,当我从中读取然后通过clear()方法删除所有条目时,我希望在我正在读取地图内容然后删除它们的过程中没有其他线程写入映射.显然,我的代码没有与之同步(锁)即使线程安全{},B/C拥有在saveEntries)锁(线程,不一定是写入我的地图中的log()方法相同的线程!除非我使用相同的锁对象锁定log()中的整个代码!

我想知道是否还有其他方法来实现线程安全,而无需通过外部锁执行同步?任何帮助是极大的赞赏.

public class Logging {

private static Logging instance;    
private static final String vendor1 = "vendor1";
private static final String vendor2 = "vendor2";    
private static long delay = 5 * 60 * 1000;

private ConcurrentMap<String, Event> vendor1Calls = new ConcurrentHashMap<String, Event>();
private ConcurrentMap<String, Event> vendor2Calls = new ConcurrentHashMap<String, Event>();

private Timer timer;    
private final Object lock = new Object();

private Logging(){
    timer = new Timer();                
    timer.schedule(new TimerTask() {
        public void run() {
            try {
                saveEntries();
            } catch (Throwable t) …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading thread-safety

7
推荐指数
1
解决办法
9919
查看次数

我的Eclipse无法再运行(或调试)我的JUnit测试

我使用Eclipse IDE:面向Web开发人员的Eclipse Java EE IDE.版本:Indigo Release

我使用JUnit 4.对于项目属性> Java Build Path> Libraries:我添加了JUnit4.同样在同一个标​​签下:Maven Dependencies>我有junit-4.8.2.jar

在pom.xml中我有:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.2</version>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

基本上,我在过去几个月里使用JUnit编写单元测试!我需要做的就是创建一个测试类,添加如下测试方法:

@Test
public void testMethod(){
    // Some test code
}
Run Code Online (Sandbox Code Playgroud)

右键单击方法,Run As> JUnit Test

这就是我需要做的就是运行我的单元测试或者进行Debug As> Junit Test来调试我的单元测试.

世界上一切都很好!从昨天开始,当我在已经拥有的类中添加一个新的测试方法然后执行:右键单击方法,运行方式> JUnit测试

什么都没发生!我不能再运行或调试任何测试了!意思是我无法添加任何新的单元测试!

我还要补充一点,我通过Eclipse做了一个干净的构建,Eclipse看到了新编译的类,它包含了我的新测试方法.

由于我的配置都没有改变,我不知道出了什么问题!

有人有什么想法吗?任何帮助将不胜感激.

C:\Project>mvn eclipse:eclipse
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-pl
ugin/2.3.2/maven-jar-plugin-2.3.2.pom
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plu
gin/2.3.2/maven-jar-plugin-2.3.2.pom (6 KB at 10.9 KB/sec)
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin
s/21/maven-plugins-21.pom
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins
/21/maven-plugins-21.pom (13 KB at 27.8 KB/sec)
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/20/mave
n-parent-20.pom
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/20/maven
-parent-20.pom (25 KB …
Run Code Online (Sandbox Code Playgroud)

java eclipse junit

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

Spring 验证 @NotNull 不验证

我正在尝试使用 Spring Validator 验证 POST 请求。这是我要验证的对象:

@Validated
public class Request implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id1;
    private Long id2;   
    private String s;   
    private List<Mapping> mappings;

    public Request() {}
    public Request (Long id1, Long id2, String s, List<Mapping> mappings) {
        this.id1 = id1;
        this.id2 = id2;
        this.s = s;
        this.mappings = mappings;
    }

    //getter() and setter() methods.
}
Run Code Online (Sandbox Code Playgroud)

这是映射类:

@Validated
public class Mapping implements Serializable {
    private static final long serialVersionUID = 1L;
    @JsonProperty(value="id") …
Run Code Online (Sandbox Code Playgroud)

java spring spring-validator spring-boot spring-restcontroller

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