我对Java的分配有一些疑问.
我上课了:
public class Test {
private String s;
public synchronized void setS(String str){
s = s + " - " + str;
}
public String getS(){
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的setter中使用"synchronized",并在我的getter中避免它,因为在我的应用程序中,有大量的数据获取,并且设置很少.必须同步设置以避免不一致.我的问题是:获取和设置变量原子?我的意思是,在多线程环境中,Thread1即将设置变量s,而Thread2即将获得"s".有没有办法getter方法可以得到一些不同于s的旧值或s的新值(假设我们只有两个线程)?在我的应用程序中获取新值并不是一个问题,并且获取旧值不是问题.但我能得到别的东西吗?
考虑到这个:
public class Test {
private Map<Integer, String> map = Collections.synchronizedMap(new HashMap<Integer, String>());
public synchronized void setMapElement(Integer key, String value){
map.put(key, value);
}
public String getValue(Integer key){
return map.get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
投入和获得原子?HashMap如何处理将元素放入其中?它首先删除旧值并放入现在的值吗?我可以获得除旧值或新值之外的其他值吗?
提前致谢!
我总是使用Spring的依赖注入来获取数据源对象并在我的DAO中使用它们,但现在,我必须编写一个没有它的应用程序.
有了Spring,我可以这样写:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1/app?characterEncoding=UTF-8" />
<property name="username" value="u" />
<property name="password" value="p" />
</bean>
Run Code Online (Sandbox Code Playgroud)
但是如何在没有Spring或任何东西的情况下在我的DAO中使用数据源?我只使用servlet和JSP.性能是非常重要的因素.