我知道标准规定它适用于矢量,但字符串呢?
我使用executorService使用此代码一次只执行一个任务
executorService=Executors.newSingleThreadExecutor();
Run Code Online (Sandbox Code Playgroud)
我Thread.activeCount()用来获取活动线程的数量,但每当我向executorService提交一个可运行的任务时,活动线程的数量会增加1.怎么可能?
我想newSingleThreadExecutor()只允许一次只执行一个任务.为什么线程数量不断增加?不应该线程数只增加一个而不是更多?
请注意,我future甚至在提交新任务之前也使用取消所有runnable的执行,并且它工作正常; 所有runnable都被打断了.但是,活动线程的数量不断增加.
编辑:这是每当我按下按钮时调用的代码(Worker只是一个实现runnable的类):
private void handle() {
executorService=Executors.newSingleThreadExecutor();
Worker worker=new Worker();
future=executorService.submit(new Worker());
}
Run Code Online (Sandbox Code Playgroud) 谁能解释为什么以下代码无法编译(在g ++(GCC)3.2.3 20030502(Red Hat Linux 3.2.3-49))?
struct X {
public:
enum State { A, B, C };
X(State s) {}
};
int main()
{
X(X::A);
}
Run Code Online (Sandbox Code Playgroud)
我收到的消息是:
jjj.cpp:在函数'int main()'中:
jjj.cpp:10:'XX :: A'不是'struct
X'jjj.cpp 的静态成员:10:没有用于调用'X的匹配函数: :X()'
jjj.cpp:1:候选者是:X :: X(const X&)
jjj.cpp:5:X :: X(X :: State)`
这是错误的代码还是编译器错误?
Neil + Konrad解决了问题.请参阅下面对Neil的回答的评论.
有没有办法重载->*以使用类似智能指针的对象?以下是我想做的事情.为简单起见,我不使用模板(一旦我将它用于单个固定类,我就会得到它).我可以使用指向数据成员的指针,但我似乎无法正确指向成员函数.目前,我愿意解决一个仅适用于成员函数(而不适用于数据成员)的重载.我甚至愿意接受一个只接受使用单个固定原型(例如void func())的成员函数指针的重载.
struct MyObject
{
void MyMethod() {}
};
struct MySmartPtr {
MyObject *p;
// What should the prototype and function body be?
// ??? operator->*(????) { ???? }
};
void MyFunc()
{
MyObject obj;
MySmartPtr obj_ptr;
obj_ptr.p = &obj;
void (MyObject::* member_func_ptr)() = &MyObject::MyMethod;
// Now call obj.MyMethod() through the "smart pointer"
(obj_ptr->*member_func_ptr)();
}
Run Code Online (Sandbox Code Playgroud)
请不要给我解决方法(例如,过载*和做(*obj_ptr.*member_func_ptr)()).我想->*按照代码段中的说明进行操作.