小编chr*_*tek的帖子

volatile是否会阻塞或涉及上下文切换?

最初我认为volatile变量比synchronized关键字更好,因为它不涉及BLOCKING或CONTEXT SWITCHING.但读到这个我现在感到困惑.

是否使用低级原子锁或非阻塞方法实现volatile?

java concurrency multithreading

5
推荐指数
2
解决办法
762
查看次数

阻止锁定与非阻塞锁定

我在这里想:如果你有2个线程执行需要同步的FAST操作,那么阻塞/上下文切换方法不是更快/更好的非阻塞方法吗?

通过非阻塞我的意思是:

while(true){if(checkAndGetTheLock())break; }

我唯一能想到的是饥饿(CPU烧坏),如果你有太多的线程在锁定周围循环.

如何平衡一种方法与另一种方法?

java concurrency multithreading concurrent-programming

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

哪里可以找到SolarFlare OpenOnLoad Kernel Bypass的一些示例Java代码?

让任何人开始的简单问题:

  1. 我知道我需要一个特殊的网络接口卡(nic)才能做到这一点.我假设它必须是SolarFlare制造的.我能得到的最便宜的是什么才能让我实现并测试内核旁路?

  2. 看起来他们使用OpenOnLoad作为网络堆栈.在哪里可以找到有关如何使用OpenOnLoad使用我的网络应用程序的示例代码和示例?我很想知道我的程序使用这项技术是多么容易或复杂.

问题来自于这个问题:Java中的内核绕过网络

java networking real-time low-latency openonload

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

当两个幂时,如何将一个除法变成一个按位移位?

我有以下需要经常做的部门:

int index = pos / 64;
Run Code Online (Sandbox Code Playgroud)

分区在cpu级别可能很昂贵.我希望有一种方法可以通过按位移位来实现.我也想了解你如何从分裂到转换,换句话说,我不想只记住按位表达式.

java algorithm bit-manipulation bitwise-operators

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

Servlet在Mac上使用美国国际键盘变得奇怪

我有一个简单的表单,我可以输入一些字符.这些字符被发送到一个servlet,它执行getBytes并打印字节."ã"的正确UTF-8字节是-61和-93,但我得到-52和-93.:(

我尝试了一切来理解和解决这个问题,但没有任何效果.我的机器上的所有东西都应该是UTF-8,所以我怀疑它与我使用了20年的美国国际键盘有关.

有没有聪明的灵魂从-52和-93来自何处?

在Jetty上固定:请参阅下面的答案.

Tomcat上的BROKEN:如何让tomcat从我的Mac键盘上理解MacRoman(x-mac-roman)字符集?

java servlets character-encoding special-characters

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

4
推荐指数
2
解决办法
6215
查看次数

在Java中将double转换为char数组的算法(不使用Double.toString或StringBuilder之类的对象)?

有谁知道我在哪里可以找到该算法?它需要一个double和StringBuilder并将double附加到StringBuilder 而不创建任何对象或垃圾.我当然不是在寻找:

sb.append(Double.toString(myDouble));

// or

sb.append(myDouble);
Run Code Online (Sandbox Code Playgroud)

我尝试了解Java源代码(我确信它以某种方式做到了)但我看不到任何代码/逻辑块足够清楚以至于可以重用.

java algorithm types numbers primitive-types

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

如何在 Java 中实现缓冲/批处理的 FileChannel?

这看起来并不简单,特别是对于读/写缓冲的 FileChannel。有什么开源实现的东西可以作为我的实现的基础吗?


给不明白的人说清楚:

FileChannel 在操作系统级别进行缓冲,我想在 Java 级别进行缓冲。阅读此处了解:FileChannel#force 和缓冲


@Peter我想从快速消息流向磁盘写入一个大文件。缓冲和批处理是要走的路。所以我想在 Java 中进行批处理,然后调用 FileChannel.write。

java io nio real-time

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

notify()而不是notifyAll()用于阻塞队列

我试图找出是否有可能有一个多生产者/多个消费者队列,我可以使用notify()而不是notifyAll().例如,在下面的实现中(源代码:这里),你不能只是简单地切换notifyAll()for notify().你不能切换的原因并不是很明显,所以我会把它作为预告片给那些想要帮助我理解这个问题的人.

所以下面的代码被破坏了:

public class BlockingQueue {

  private Object lock = new Object();

  private List queue = new LinkedList();
  private int  limit = 10;

  public BlockingQueue(int limit){
    this.limit = limit;
  }


  public void enqueue(Object item)
  throws InterruptedException  {
   synchronized(lock) {
    while(this.queue.size() == this.limit) {
      lock.wait();
    }
    if(this.queue.size() == 0) {
      lock.notify();
    }
    this.queue.add(item);
   }
  }


  public Object dequeue()
  throws InterruptedException{
   synchronized(lock) {
    while(this.queue.size() == 0){
      lock.wait();
    }
    if(this.queue.size() == this.limit){
      lock.notify(); …
Run Code Online (Sandbox Code Playgroud)

java queue multithreading blockingqueue data-structures

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

(x%64)==(x&63)背后的基本原理是什么?

可能重复:
按位并代替模数运算符

有人可以解释使两个表达式等价的理由吗?我知道它只能起作用,因为64是2的幂,但我怎么能在逻辑上或数学上从分区到按位呢?

algorithm bit-manipulation bitwise-operators

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

如何在 PHP 中的 cookie 中存储外部 HTTP_REFERER 以供以后检索?

我想要一个 PHP 代码来执行以下操作:

  • 用户通过外部网站中的链接访问我的网站,换句话说,HTTP_REFERER 不是来自我自己的域。

  • 将此 HTTP_REFERER 保存在 cookie 中

在我网站的另一部分,我将检查此 cookie 是否存在,并将保存的引用包含在用户配置文件中。

php cookies http-headers

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

如何从Java中的double获取十进制数字的数量?(例如:2.34 => 2、2.340 => 2、0.921 => 3)

标题是不言自明的。从 Java 双精度数中获取位数的好方法是什么,最好只使用数学?

123 => 0
1.12 => 2
1.0001 => 4
2.340000 => 2
0.10 => 1
Run Code Online (Sandbox Code Playgroud)

例如,我有一个双 d = 0.320。

据我所知,对于编译器/jvm/计算机:

System.out.println(0.0100000 == 0.01); // prints true...
Run Code Online (Sandbox Code Playgroud)

java floating-point double integer

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

如何计算存储N位所需的long(64位)数?

好吧,我可以通过逻辑做到这一点,但我打赌有一个数学运算或表达式来做到这一点.有人存在吗?如果是,那是什么?

这是算法:

private int calcNumberOfLongs(int size) {
    if (size % 64 == 0) {
        return size / 64;
    } else {
        return size / 64 + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

让我清楚我想要的东西:

对于150位,我需要三个64位长.两个当然只给我128位.这是第一次计算.

第二个计算,这一个更重要,因为它将一直执行,是从位位置变为长位.例如:

bit 5 -> first long
bit 64 -> first long
bit 65 -> second long
bit 140 -> third long
Run Code Online (Sandbox Code Playgroud)

获取此信息的数学表达式和/或按位运算是什么?


好的,从下面的答案来看,它似乎是从位位置变长,我们只是使用:

多头头寸=比特头寸/ 64

延续在这里:如何在2的幂时将除法变为按位移位?

java algorithm bit-manipulation bitwise-operators

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