在ConcurrentHashMap的 javadoc中有以下内容:
检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的更新操作的结果.对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目.类似地,Iterators和Enumerations在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素.它们不会抛出ConcurrentModificationException.但是,迭代器设计为一次只能由一个线程使用.
这是什么意思?如果我尝试同时使用两个线程迭代地图会发生什么?如果我在迭代时从地图中添加或删除值会发生什么?
java concurrency multithreading thread-safety concurrenthashmap
在我们的一些项目中,有一个类层次结构,它在链中向下添加更多参数.在底部,一些类可以有多达30个参数,其中28个只是被传递给超级构造函数.
我会承认,通过像Guice之类的东西使用自动化DI会很好,但由于某些技术原因,这些特定项目仅限于Java.
按类型按字母顺序组织参数的约定不起作用,因为如果某个类型被重构(您为参数2传入的圆现在是一个Shape),它可能会突然出现故障.
这个问题可能具体而且充满了"如果这是你的问题,你在设计层面做错了"的批评,但我只是在寻找任何观点.
我有一个原始的浮点数,我需要作为一个原始的双.简单地将浮子铸造成双倍会给我带来奇怪的额外精度.例如:
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
Run Code Online (Sandbox Code Playgroud)
但是,如果不是强制转换,我将float作为字符串输出,并将字符串解析为double,我得到我想要的:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
Run Code Online (Sandbox Code Playgroud)
有没有比去String更好的方法呢?
我正在尝试制作一个需要使用反射的maven插件.我想要一个项目来运行插件,并在项目中为它提供类的全名,插件将通过反射加载它以从中获取信息.
但是类加载器有些奇怪,因为它在我使用时找不到类
Class.forName("package.MyClass");
Run Code Online (Sandbox Code Playgroud)
看看这里,我无法弄清楚我的插件的类加载器,当在不同的项目中运行时,是否可以访问该项目的类.
我有一种情况,我在一台服务器上运行两个不同的webapps,使用不同的端口.它们都运行Java的Jetty servlet容器,因此它们都使用名为JSESSIONID的cookie参数来跟踪会话ID.这两个webapps正在争夺会话ID.
req.getSession(false);我时null.如果我调用req.getSession(true)我得到一个新的Session对象,但是WebApp2的HTTP响应有一个带有JSESSIONID = 20的set-cookie头所以Sessions在每个网络应用程序之间徘徊.req.getSession(false)如果已经定义了JSESSIONID cookie,我真的希望返回一个有效的会话.
一种选择是基本上用HashMap和名为WEBAPP1SESSIONID和WEBAPP2SESSIONID的cookie重新实现Session框架,但这很糟糕,这意味着我必须将新的Session内容破解到ActionServlet和其他一些地方.
这一定是其他人遇到的问题.Jetty是不是HttpServletRequest.getSession(boolean)很糟糕?
我有一个客户端服务器架构的应用程序.客户端使用Java Web Start和Java Swing/AWT,sert使用HTTP服务器/ Servlet和Tomcat.通信是从对象的序列化中创建的,创建一个ObjectOutput序列化一个字节数组并分别发送到服务器并调用ObjectInputStream并反序列化.
应用程序遵循正确的并发通信时间,并开始显示错误"SocketException read timeout".当服务器在我的servlet doPost方法中调用方法ObjectInputStream.getObject()时,会发生错误.
tomcat将变慢并且错误开始减少服务器响应时间,直到我必须重新启动服务器并且一切正常后的崩溃时间.
有人经历过这个问题吗?
客户代码
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
ObjectOutputStream oss = new ObjectOutputStream(os);
oss.writeUTF("protocol header sample");
oss.writeObject(_parameters);
oss.flush();
oss.close();
Run Code Online (Sandbox Code Playgroud)
服务器代码
ObjectInputStream input = new ObjectInputStream(_request.getInputStream());
String method = input.readUTF();
parameters = input.readObject();
Run Code Online (Sandbox Code Playgroud)
input.readObject()是错误的位置
我正在使用Lobo - Java Web浏览器库,它给了我一个例外,经过一些研究后我确定可能是因为该库已经与旧版本的Java进行了编译.
代码如下:
import java.io.IOException;
import org.lobobrowser.html.UserAgentContext;
import org.lobobrowser.html.parser.DocumentBuilderImpl;
import org.lobobrowser.html.parser.InputSourceImpl;
import org.lobobrowser.html.test.SimpleUserAgentContext;
import org.xml.sax.SAXException;
public class Cobratest
{
public static void main(String[] args) throws SAXException, IOException
{
UserAgentContext uAgent = new SimpleUserAgentContext();
DocumentBuilderImpl docBuild = new DocumentBuilderImpl(uAgent);
docBuild.parse(new InputSourceImpl("http://dic.amdz.com/"));
}
}
Run Code Online (Sandbox Code Playgroud)
并且堆栈跟踪是:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface sun.font.FontManager, but class was expected
at org.lobobrowser.util.gui.FontFactory.createFont(FontFactory.java:210)
at org.lobobrowser.util.gui.FontFactory.createFont_Impl(FontFactory.java:180)
at org.lobobrowser.util.gui.FontFactory.createFont(FontFactory.java:127)
at org.lobobrowser.util.gui.FontFactory.getFont(FontFactory.java:98)
at org.lobobrowser.html.style.StyleSheetRenderState.<clinit>(StyleSheetRenderState.java:43)
at org.lobobrowser.html.domimpl.NodeImpl.<clinit>(NodeImpl.java:39)
at org.lobobrowser.html.parser.DocumentBuilderImpl.createDocument(DocumentBuilderImpl.java:143)
at org.lobobrowser.html.parser.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:97)
Run Code Online (Sandbox Code Playgroud)
当我检查时,org.lobobrowser.util.gui.FontFactory.createFont我发现有一个FontManager名称从之前版本的Java改变了.在这个 …
我的项目依赖org.apache.pig:pig,但我不希望的传递依赖org.mortbay.jetty:jetty和org.mortbay.jetty:servlet-api.我添加了这两个工件,<excludes>但似乎不起作用:
mvn dependency:tree -Dincludes=org.mortbay.jetty:servlet-api
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - myGroupp:myArtifact:jar:1.0-SNAPSHOT
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] myGroupp:myArtifact:jar:1.0-SNAPSHOT
[INFO] \- org.apache.pig:pig:jar:0.10.0:compile
[INFO] \- org.mortbay.jetty:jetty:jar:6.1.26:compile
[INFO] \- org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>myGroupp</groupId>
<artifactId>myArtifact</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.pig</groupId>
<artifactId>pig</artifactId>
<version>0.10.0</version>
<exclusions>
<exclusion>
<artifactId>org.mortbay.jetty</artifactId>
<groupId>jetty</groupId>
</exclusion>
<exclusion>
<artifactId>org.mortbay.jetty</artifactId>
<groupId>servlet-api</groupId>
</exclusion>
</exclusions> …Run Code Online (Sandbox Code Playgroud) 股票hadoop2.6.0安装给了我no filesystem for scheme: s3n.hadoop-aws.jar现在添加到类路径给了我ClassNotFoundException: org.apache.hadoop.fs.s3a.S3AFileSystem.
我有一个大多数股票安装hadoop-2.6.0.我只设置目录,并设置以下环境变量:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export HADOOP_COMMON_HOME=/opt/hadoop
export HADOOP_HOME=$HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
export HADOOP_OPTS=-XX:-PrintWarnings
export PATH=$PATH:$HADOOP_COMMON_HOME/bin
Run Code Online (Sandbox Code Playgroud)
该hadoop classpath方法是:
/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/contrib/capacity-scheduler/*.jar:/opt/hadoop/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
当我试着奔跑时,hadoop distcp -update hdfs:///files/to/backup s3n://${S3KEY}:${S3SECRET}@bucket/files/to/backup我得到了Error: java.io.Exception, no filesystem for scheme: s3n.如果我使用s3a,我会得到同样的错误抱怨s3a.
在互联网告诉我,hadoop-aws.jar是不是默认的类路径的一部分.我添加了以下行/opt/hadoop/etc/hadoop/hadoop-env.sh:
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_COMMON_HOME/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
现在hadoop classpath附上以下内容:
:/opt/hadoop/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
这应该涵盖/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar.现在我得到:
Caused by: java.lang.ClassNotFoundException:
Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
Run Code Online (Sandbox Code Playgroud)
jar文件包含无法找到的类:
unzip -l /opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar |grep S3AFileSystem
28349 2014-11-13 …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试一些东西,我想知道以下代码是否能够返回true
public boolean impossible(byte[] myBytes) {
if (myBytes.length == 0)
return false;
String string = new String(myBytes, "UTF-8");
return string.length() == 0;
}
Run Code Online (Sandbox Code Playgroud)
我能传递的某些价值是否会返回真实?我已经摆弄了2字节序列的第一个字节,但它仍然产生一个字符串.
为了澄清,这发生在通过GCJ编译为原生二进制可执行文件的Java 1.4代码上的PowerPC芯片上.这基本上意味着大多数赌注都已关闭.我主要想知道Java的"正常"行为,或Java的规范是否做出了任何承诺.
我完全迷失了这个正则表达式如何匹配python中的这个字符串.有人能理解它吗?
import re
regex = "^PHP/5.\\{3|2\\}.\\{1|2|3|4|5|6|7|8|9|0\\}\\{1|2|3|4|5|6|7|8|9|0\\}$"
ua = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'
re.compile(regex).search(ua)
Run Code Online (Sandbox Code Playgroud)
正则表达式以PHP字符串开头,而字符串则没有.难道不应该仅仅取消比赛的资格吗?