小编Onk*_*nki的帖子

AtomicInteger中的"比较和设置"如何工作

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 concurrency multithreading volatile

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

java 8中javaw进程的私有字节增加

我的项目已经开始使用java 7中的java 8.

切换到java 8后,我们发现消耗的内存随着时间的推移而越来越高.

以下是我们所做的调查:

  • 只有从java7和java8迁移后才会出现问题
  • 因为元空间是与内存相关的唯一内容,它是从hava 7变为java 8.我们监视了元空间,这不会超过20 MB.
  • 堆也保持一致.

现在剩下的唯一途径是分析内存如何在java 7和java 8中进行分发,特别是私有字节内存.任何想法或链接在这里将不胜感激.

注意:此javaw应用程序是基于swing的应用程序.

更新1:使用NMT工具分析本机内存并生成与基线相比占用的内存差异.我们发现堆保持相同但线程正在泄漏所有这些内存.因此Heap没有变化,我假设这个泄漏是由于本机代码.

所以挑战仍然存在.关于如何分析所有线程占用的内存的任何想法在这里都会有所帮助.以下是从本机内存跟踪中获取的快照.

在这张图片中,你可以看到88 MB的线程增加了.竞技场和资源处理数量增加了很多.

在此输入图像描述

在这张图片中你可以看到这个Malloc中增加了73 MB.但是这里没有显示方法名称. 在此输入图像描述

所以请在理解这两个截图时提供一些信息.

java-native-interface multithreading native java-7 java-8

18
推荐指数
2
解决办法
1910
查看次数

部署其余Web服务时出错

我是新来的休息网络服务.

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)

java rest web-services system-error

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

为什么"同步"在多态性中没有作用

synchronized不是方法签名的一部分.但是当我们覆盖一个方法时,它不仅仅是方法签名决定了被覆盖的方法是否会被编译.

例如,我们无法添加或扩大已检查的异常

为什么synchronized在多态性中没有作用.一个synchronized方法不应该不把覆盖synchronized.由于使用超类变量的人可能认为所有方法都是线程安全的.

但是,应该允许覆盖非同步方法,synchronized因为它添加了更多功能,但另一方面,除了时滞之外,用户不会遇到任何错误.

我正在寻找一个合乎逻辑的解释,可以说明"为什么设计如此".

java polymorphism multithreading synchronization

7
推荐指数
2
解决办法
145
查看次数

当套接字被取消引用时,它们是否被垃圾收集

我试图理解 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)

java sockets networking multithreading garbage-collection

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

如何在春季启动时使用不受密码保护(.p12)的SSL证书

我有一个.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)

java ssl spring spring-boot

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

在加载JNI库时,如何使用实际库名称进行映射

我们使用加载任何本机库

System.loadLibrary("hello")
Run Code Online (Sandbox Code Playgroud)

现在我开始知道这个库名称是指基于unix的系统的windowslibhello.so的hello.dll.

那么这些平台相关变化发生在哪里?

JRE是这样做的吗?

java dll java-native-interface native shared-libraries

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

为什么冒泡排序被称为冒泡排序?

我正在学习泡泡排序.而且我倾向于忘记每次的排序类型.所以我试图找到每种类型的逻辑含义,以便它有助​​于回忆排序的逻辑:

我无法理解为什么冒泡排序被命名为冒泡排序的确切含义?

sorting algorithm bubble-sort

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

仅在特定 URL 上调用自定义 Spring Security 过滤器

我有一个 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

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

spring boot : 如何动态设置 spring 属性

有很多属性可以在 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 spring properties spring-boot

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