AtomicInteger使用两个概念:CAS和volatile变量.
使用volatile变量确保当前值对所有线程可见,并且不会被缓存.
但我对CAS(比较和设置)概念感到困惑,其解释如下:
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是什么if(compareAndSet(current, next)回归false?价值会不会更新?在这种情况下,当Thread执行以下情况时会发生什么:
private AtomicInteger count = new AtomicInteger();
count.incrementAndGet();
Run Code Online (Sandbox Code Playgroud) 我的项目已经开始使用java 7中的java 8.
切换到java 8后,我们发现消耗的内存随着时间的推移而越来越高.
以下是我们所做的调查:
现在剩下的唯一途径是分析内存如何在java 7和java 8中进行分发,特别是私有字节内存.任何想法或链接在这里将不胜感激.
注意:此javaw应用程序是基于swing的应用程序.
更新1:使用NMT工具分析本机内存并生成与基线相比占用的内存差异.我们发现堆保持相同但线程正在泄漏所有这些内存.因此Heap没有变化,我假设这个泄漏是由于本机代码.
所以挑战仍然存在.关于如何分析所有线程占用的内存的任何想法在这里都会有所帮助.以下是从本机内存跟踪中获取的快照.
在这张图片中,你可以看到88 MB的线程增加了.竞技场和资源处理数量增加了很多.
在这张图片中你可以看到这个Malloc中增加了73 MB.但是这里没有显示方法名称.

所以请在理解这两个截图时提供一些信息.
我是新来的休息网络服务.
从http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/中选取示例
在点击URL时, http://localhost:8080/RESTfulExample/rest/hello/mkyong 我收到了这个奇怪的错误:

细节是:
PLATFORM VERSION INFO
Windows : 6.1.7601.65536 (Win32NT)
Common Language Runtime : 4.0.30319.1022
System.Deployment.dll : 4.0.30319.1 (RTMRel.030319-0100)
clr.dll : 4.0.30319.1022 (RTMGDR.030319-1000)
dfdll.dll : 4.0.30319.1 (RTMRel.030319-0100)
dfshim.dll : 4.0.31106.0 (Main.031106-0000)
SOURCES
Deployment url : http://localhost:8080/rs1/rest/hello/hi,
ERROR SUMMARY
Below is a summary of the errors, details of these errors are listed later in the log.
* Activation of http://localhost:8080/rs1/rest/hello/hi, resulted in exception. Following failure messages were detected:
+ Exception reading manifest from http://localhost:8080/rs1/rest/hello/hi,: the manifest …Run Code Online (Sandbox Code Playgroud) synchronized不是方法签名的一部分.但是当我们覆盖一个方法时,它不仅仅是方法签名决定了被覆盖的方法是否会被编译.
例如,我们无法添加或扩大已检查的异常
为什么synchronized在多态性中没有作用.一个synchronized方法不应该不把覆盖synchronized.由于使用超类变量的人可能认为所有方法都是线程安全的.
但是,应该允许覆盖非同步方法,synchronized因为它添加了更多功能,但另一方面,除了时滞之外,用户不会遇到任何错误.
我正在寻找一个合乎逻辑的解释,可以说明"为什么设计如此".
我试图理解 SO_TIMEOUT、线程资源和垃圾收集的概念。
我在我的项目中看到了一个编码错误,其中一组套接字被错误地取消引用而没有关闭。
在 JAVA 1.6 中,它们会在几分钟内关闭,但在 JAVA 1.8 中,它们需要几个小时才能关闭。[仅在linux平台上测试]
所以我想更深入地探讨这个问题。
我创建了这个程序,其中创建了 10 个套接字,但正如您所看到的,其中 9 个被取消引用,然后线程进入长时间睡眠状态:
import java.net.Socket;
/**
* Created by 212477559 on 5/30/16.
*/
public class TestClientSocket {
public static void main(String args[])
{
try
{
Socket socket;
for(int j=0;j<10;j++)
{
socket =new Socket("localhost",9090);
socket.setKeepAlive(false);
}
Thread.sleep(900000);
}
catch(Exception e)
{
System.out.println("throws");
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我跑步时
netstat -np TCP | netstat -np TCP | 找到“9090”
我仍然可以看到,半小时左右后,所有套接字仍处于已建立状态。所以我有以下问题:
1)为什么这9个套接字没有被垃圾收集?
2)该线程是否仍然持有资源?
3)下面提到的方法是关闭套接字的唯一方法:
1. close the sockets?
2. Thread which created …Run Code Online (Sandbox Code Playgroud) 我有一个.pem证书,必须在我的Spring Boot应用程序中使用。现在,由于Java无法理解.pem格式,因此我将其转换为.p12格式。
由于我们已经有一个不受任何密码保护的.pem证书,因此我也尝试避免使用.p12密码。
我创建了两个.p12文件,其中一个使用以下命令使用密码:
openssl x509 -signkey sslcert.key -in sslcert.csr -req -days 365
-out sslcert.pem
Run Code Online (Sandbox Code Playgroud)
另一个没有密码的命令如下:
openssl pkcs12 -inkey sslcert.key -in sslcert.pem -export -passout
pass: -nokeys -out sslcert.p12
Run Code Online (Sandbox Code Playgroud)
我能够在spring boot应用程序中使用以下属性,使用带有密码的密码成功获得结果:
server.port=8443
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=keys/sslcert.p12
server.ssl.key-store-password=password
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用不带密码的密码(这是我的偏好)时,却遇到了sslhandshake异常。
而且,我无法弄清楚如何将此信息传递给ssl没有密码保护的spring boot。
到目前为止,我尝试了许多组合,例如不传递密码属性或将其保留为空,但在所有情况下均失败。
server.port=8443
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=keys/sslcert.p12
Run Code Online (Sandbox Code Playgroud)
我低于异常:
javax.net.ssl.SSLHandshakeException: no cipher suites in common
at sun.security.ssl.Handshaker.checkThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
at sun.security.ssl.SSLEngineImpl.writeAppRecord(Unknown Source)
at sun.security.ssl.SSLEngineImpl.wrap(Unknown Source)
at javax.net.ssl.SSLEngine.wrap(Unknown Source)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:864)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:515)
at org.eclipse.jetty.server.HttpConnection.fillRequestBuffer(HttpConnection.java:331)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:243)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
at …Run Code Online (Sandbox Code Playgroud) 我们使用加载任何本机库
System.loadLibrary("hello")
Run Code Online (Sandbox Code Playgroud)
现在我开始知道这个库名称是指基于unix的系统的windows 和 libhello.so的hello.dll.
那么这些平台相关变化发生在哪里?
JRE是这样做的吗?
我正在学习泡泡排序.而且我倾向于忘记每次的排序类型.所以我试图找到每种类型的逻辑含义,以便它有助于回忆排序的逻辑:
我无法理解为什么冒泡排序被命名为冒泡排序的确切含义?
我有一个 Spring Boot 应用程序,我试图在其中创建一个自定义安全过滤器,如下所示:
public class CustomSecurityFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//it should be invoked only for "/needCustomSecurityOnThisURL"
chain.doFilter(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我只想在特定的 URL 上调用它,但我无法弄清楚这一点。我正在使用以下代码调用它:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf().disable() // Disable CSRF Token
.httpBasic();
// Disable Session Management
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
//want to add the Custom Security Filter n it should …Run Code Online (Sandbox Code Playgroud) java spring restful-authentication spring-security spring-filter
有很多属性可以在 spring boot 应用程序的 application.properties 中定义。
但我想传递属性来配置 ssl 以从代码内部弹出。
server.ssl.enabled=true
# The format used for the keystore
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=keys/keystore.jks
# The password used to generate the certificate
server.ssl.key-store-password=changeit
# The alias mapped to the certificate
server.ssl.key-alias=tomcat
Run Code Online (Sandbox Code Playgroud)
因此,这些将是从 application.properties 使用的 spring 定义的属性。我只想根据一些逻辑从代码中设置它们。
对于非 spring 应用程序,我仍然有一些想法,它们可以作为应用程序、会话或上下文属性传递,但我不知道这在 spring 中是如何工作的。
任何帮助,将不胜感激。
java ×8
spring ×3
native ×2
spring-boot ×2
algorithm ×1
bubble-sort ×1
concurrency ×1
dll ×1
java-7 ×1
java-8 ×1
networking ×1
polymorphism ×1
properties ×1
rest ×1
sockets ×1
sorting ×1
ssl ×1
system-error ×1
volatile ×1
web-services ×1