我正在用java制作一个相互竞争的汽车程序.每辆车都是一个单独的线程.
当汽车完成比赛时,每个人都称这种方法.我已经在不同的计时器速度下测试了该方法,它似乎工作正常.但我确实意识到每个线程都在访问变量carsComplete,有时是在同一时间(至少在date命令给我的范围内).
所以我的问题是:这个方法是线程安全的吗?
public static String completeRace()
{
Date accessDate = new Date();
System.out.println("Cars Complete: " + carsComplete + " Accessed at " + accessDate.toString());
switch(++carsComplete)
{
case 1: return "1st";
case 2: return "2nd";
case 3: return "3rd";
default: return carsComplete + "th";
}
}
Run Code Online (Sandbox Code Playgroud) 作为对依赖性过敏的人,我什么时候会使用类似OSGi而不是内置的java 6 http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html(我想要的)让插件罐子掉进去).
(仅供参考,这是一个scala应用程序,对任何建议持开放态度,ServiceLoader非常接近我想要的).
如果我在Grails控制台中执行此代码:
def p = new Post(title: "T");
p.save(flush: true); // or p.save();
Post.count();
Run Code Online (Sandbox Code Playgroud)
GORM不会抛出任何异常,但数据不会保存在我的数据库中.我究竟做错了什么?
我有一个实体:
@Entity
@Table(name = "smsc.security_users")
public class User {
@Id
@Column(name = "id")
private int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "enabled")
private int enabled;
@Column(name = "master_id", nullable = true)
private Integer master_id;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "passwordExpiration")
private Date passwordExpiration;
public String getUsername() {
return username;
}
...
Run Code Online (Sandbox Code Playgroud)
我在说master_id.这是我的DAO方法:
public void add(String userName, String password, Integer master_id) {
Session session = null;
session = this.sessionFactory.getCurrentSession();
Query query = …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用Log4J v2.0 Beta3进行日志记录,并且在运行单元测试时生成了日志消息.我检查了API以某种方式将日志级别设置为CRITICAL,但我找不到任何方法来更改记录器配置.
事实上,我在log4j2网站上看到了这个:
请注意,与Log4j 1.x不同,公共Log4j 2 API不会公开添加,修改或删除appender和过滤器或以任何方式操作配置的方法.
所以说.在单元测试中禁用日志记录的正确方法是什么?
如果我有一个带有try/finally部分的函数,并且运行它的线程在try块中被中断,那么finally块是否会在中断实际发生之前执行?
假设我有一个如下的懒惰序列:
(def s (iterate inc 1))
(take 10 s)
=> (1 2 3 4 5 6 7 8 9 10)
Run Code Online (Sandbox Code Playgroud)
现在,我想生成一系列累积和,s如下所示:
=> (1 3 6 10 15 ...)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我尝试的是使用atom并累积总和(变异)这是产生累积序列的唯一方法还是有更好的方法来做到这一点?
注意:上述累积金额只是一个例子.源序列可以是其他序列.所以我不能使用公式:s(n) = n(n+1)/2
如果我有一个案例类的嵌套对象图,类似于下面的示例,并且我想将它们的集合存储在redis列表中,那么我应该看哪些库或工具可以提供最快的整体往返Redis的?
这将包括:
时间反序列化回案例类
case class Person(name: String, age: Int, children: List[Person]) {}
Run Code Online (Sandbox Code Playgroud)根据JLS:
类或接口类型T将在第一次出现以下任何一个之前立即初始化:
T是一个类,并且创建了T的实例.
它也说,
类的初始化包括执行其静态初始化程序和类中声明的静态字段(类变量)的初始化程序
我从中推断出两点
现在,
我假设当我在自己的(Test自己的)静态初始化程序中创建一个类Test的对象时,它应该抛出一个堆栈溢出,因为它应该重复调用自身,因为根据上面两点,类的实例化应该初始化类和初始化块具有类的实例化.当我在自己的构造函数或其自己的实例初始化程序中实例化类时,会发生堆栈溢出.
例如,
public class Test {
static{
System.out.println("static test");
new Test();
}
{
//new Test(); // This will give a stack overflow
System.out.println("intializer");
}
public Test(){
//new Test(); // This will give a stack overflow
System.out.println("constructor");
}
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
然而,结果是不同的.
结果:
静态测试初始化构造函数
要么我太困惑了解课程的初始化,要么如果我在这里遗漏一些非常明显的东西并且感谢你的帮助,我会道歉.