我在java中看到了一些例子,他们在一块代码上做同步来改变一些变量,而这个变量最初被声明为volatile.我在单例类的一个例子中看到,他们将唯一的实例声明为volatile并且他们同步了块初始化那个实例...我的问题是为什么我们在同步它时声明它是不稳定的,为什么我们需要同时做两个?对其他人来说不是其中之一吗?
public class someClass {
volatile static uniqueInstance = null;
public static someClass getInstance() {
if(uniqueInstance == null) {
synchronized(someClass.class) {
if(uniqueInstance == null) {
uniqueInstance = new someClass();
}
}
}
return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
java multithreading volatile synchronized double-checked-locking
我在我的IPC解决方案中使用Qlocalsocket,我能够启动服务器并接受来自QLocalSocket客户端的连接并进行良好的通信,没有任何问题.
但是我的问题发生在我杀死服务器的进程时,我不能让QLocalServer再次在同一个地方监听,我必须更改服务名称才能再次启动它,这在运行时环境是不可能的.
那么如何让前一个进程发布该名称呢?
这是我如何启动服务器:
m_server = new QLocalServer(this);
if (!m_server->listen("serviceUniqueName")) {
qDebug() << "Not able to start the Server";
return;
}
Run Code Online (Sandbox Code Playgroud) 我想制作一个响应双击的mapview并获取点击位置的地点并将其返回给调用者活动..我在eclipse模拟器中测试我的应用程序,但是当我双击地图时没有任何反应和我的onDoubleTap()方法永远不会进入
这是我的代码
public class MYMapActivity extends MapActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{
GestureDetector gestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mymapview);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
gestureDetector = new GestureDetector(getApplicationContext(), this);
gestureDetector.setOnDoubleTapListener(this);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent mev) {
MapView mapView = (MapView) findViewById(R.id.mapview);
Projection p = mapView.getProjection();
GeoPoint geoPoint = p.fromPixels((int) mev.getX(), (int) mev.getY());
int latitude = geoPoint.getLatitudeE6();
int longitude = geoPoint.getLongitudeE6();
Intent resultIntent = new Intent();
resultIntent.putExtra("latitude", latitude);
resultIntent.putExtra("longitude", longitude); …
Run Code Online (Sandbox Code Playgroud) 如果我有一个只有一个这样的语句的getter方法
public class NumberClass{
int number;
public int getNumber() {
return number;
}
...
}
Run Code Online (Sandbox Code Playgroud)
多线程访问此方法,我是否必须同步此方法或没有必要,因为它只有一个语句?
密码学书籍说你应该公开你的加密/解密算法来测试它以防止攻击和密码分析,并且非暴露算法不被认为是强大的,因为它没有针对攻击进行测试,但他们也说加密算法的安全性取决于主要是关键长度和关键随机分布,以保护它免受暴力攻击和数学分析的关键.
我的问题是为什么我们需要暴露我们的算法,而它主要取决于密钥长度,如果我的密钥足够长并且真正随机化,那么了解算法有什么好处?
java ×2
android ×1
cryptography ×1
double-click ×1
encryption ×1
gesture ×1
ipc ×1
qlocalsocket ×1
qt ×1
security ×1
synchronized ×1
volatile ×1