小编bes*_*sss的帖子

解锁后的Java线程执行顺序

假设我有2个线程,t1t2,以及一个锁定对象,m.线程t1处于无限循环中,在每次迭代时,它会抓取m上的锁定,执行某些操作,解锁m并立即重新启动.在一次迭代期间,t2请求对m进行锁定但被t1阻止并且必须等待.现在,当t1解锁m时,是否保证t2将获得m的下一次锁定?或者可以点t1下一轮迭代偷偷走在前面?

通常,是否为等待线程设置了队列?如果t1具有锁定,并且所有其他线程也希望该锁定按以下顺序被阻止:t2,t3,...,其余线程将按照它们被阻止的顺序继续执行(例如t2运行,然后是t3,等等.)?

(我简单地仔细阅读了java规范并找不到答案.如果它在那里,请告诉我,我会回去仔细阅读.)

谢谢!(首先是SO帖子,哇哦!)

java multithreading locking monitor

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

在 JPanel 中嵌入 HWND(窗口句柄)

我正在尝试在 JPanel 中嵌入 HWND(窗口句柄)。

实际上,我可以将我的 HWND 嵌入到 JFrame 中,但是嵌入的窗口始终位于其他组件的顶部,我无法移动它。如果尝试删除我的 JFrame 的所有子组件,HWND 会留在那里。HWND 似乎是在 JFrame 之上绘制的,而不是其中之一。

要将 HWND 嵌入 JPanel,我通过 jna 使用 User32:

User32.SetParent(iage.getRenderHwnd(), (int) getGUIHwnd(j));
Run Code Online (Sandbox Code Playgroud)

我用它来获取我的 JFrame 的 HWND:

j.getPeer() != null ? ((WComponentPeer) j.getPeer()).getHWnd(): 0;
Run Code Online (Sandbox Code Playgroud)

有没有办法将 HWND 嵌入 JPanel 或将其添加到其他组件中,以便我可以像在 UI 中一样放置它?

谢谢

java awt hwnd

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

Java:用于释放未使用内存的Commandline参数

在Bash中,我使用java -Xmx8192m -Xms512m -jar jarfile命令启动Java进程,初始堆空间为512MB,最大堆空间为8GB.

我喜欢堆空间如何根据需求增加,但是一旦堆空间增加,它就不会释放,尽管进程不需要内存.如何释放进程未使用的内存?

示例:进程启动,并使用600MB内存.堆空间从512MB增加到略多于600MB.然后进程降低到400MB RAM使用率,但堆分配保持在600MB.如何使分配保持在RAM使用率附近?

java bash garbage-collection

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

是否为servlet处理的整个请求保证了一个线程?

我遇到了一种情况,我使用ThreadLocal静态变量来保存一个bean,该bean在请求的生命周期中包含来自不同类的各种度量值.在过滤器中,我创建bean并将其设置在线程局部变量中,并在处理完请求后将其从同一过滤器中的线程局部变量中删除.我遇到的是包含来自其他请求的值的bean!对此的唯一解释是共享线程以同时处理多个请求.所以标题中的问题.

java servlets exception-handling

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

Java - 在程序结束时对象不是"垃圾回收"?

public class Main {

    public static void main(String[] args) throws InterruptedException {
        ClassA a = new ClassA();
        a = null;

        //Runtime.getRuntime().gc();
        Thread.sleep(4000);
    }
}

public class ClassA {

    @Override
    public void finalize(){
        System.out.println("cleaned");
    }  
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,finalize()永远不会执行.控制台上没有任何内容.从gc()中删除注释时,执行finalize(),并将"已清除"打印到控制台.为什么我必须明确地调用垃圾收集器?

java garbage-collection finalize application-shutdown

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

单个链表上的操作的大O.

假设您有一个大小为N的链接列表,并且您想要从最后开始对每个元素执行操作.

我想出了以下伪代码:

while N > 0
    Current = LinkedList 
    for 0 to N
        Current = Current.tail
    end
    Operation(Current.head)
    N := N-1
end
Run Code Online (Sandbox Code Playgroud)

现在我必须确定这个算法是哪个Big-O.
假设Operation()是O(1),我认为它是这样的:

N + (N-1) + (N-2) + ... + (N-(N-1)) + 1
Run Code Online (Sandbox Code Playgroud)

但我不确定Big-O实际上是什么.我认为它肯定小于O(N ^ 2),但我认为你不能说它的O(N)......

big-o linked-list pseudocode

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

堆栈溢出错误?

我正在开发一个帐户申请表.当我试图运行发票表格时,发生了一个叫做堆栈溢出异常的事情...告诉我该怎么做...我想在Stock类中声明发票对象之前一切都很好.这是输出......

run:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
    at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:215)
    at java.awt.Window.init(Window.java:394)
    at java.awt.Window.<init>(Window.java:433)
    at java.awt.Frame.<init>(Frame.java:403)
    at java.awt.Frame.<init>(Frame.java:368)
    at javax.swing.JFrame.<init>(JFrame.java:158)
    at Invoice.<init>(Invoice.java:10)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135)
    at Stock.<init>(Stock.java:670)
    at Invoice.<init>(Invoice.java:1135) …
Run Code Online (Sandbox Code Playgroud)

java

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

Java varargs分配数组对象?

哇!我刚刚意识到Java中的varargs方法导致在调用它们时分配一个数组.不知道为什么我会期待任何不同的东西,但是否应该为数组提供某种池?至少对于最初的0到8个尺寸?Java中是否有任何解决方法使用varargs而不会为每次调用分配数组?

编辑:请理解泄漏到GC的内存只是一个不必要的开销/延迟.这不是一些暗示的错误.仅仅因为Java有GC并不意味着你可以随意创建大量的垃圾.

java variadic-functions

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