ฉันกำลังอ่านเอกสารประกอบบทที่ 5.2 ฟังก์ชั่น และฉันสงสัยว่าจะเกิดอะไรขึ้นกับโค้ดต่อไปนี้ มันควรจะทำงานได้ดีในสภาพแวดล้อมแบบมัลติเธรดหรือไม่? คำถามทั่วไปคือ Function สามารถเป็นแบบมัลติเธรดได้หรือไม่ ดังที่ฉันรู้ว่าผู้ทำแผนที่ตัวเดียวนั้นเป็นเธรดเดี่ยว
โดยเฉพาะอย่างยิ่งฉันได้ทดสอบโค้ดดังกล่าวแล้วและสำหรับฉันแล้วดูเหมือนว่านี่ไม่ปลอดภัยสำหรับเธรด บางทีฉันอาจไม่เข้าใจเอกสารในหน้า (39) อย่างถูกต้อง
public class NotThreadSafeObject{
...
public void doSomething(){
// update state
}
public String getValue(){
// returns value from state
}
public class SomeFunction extends BaseOperation<Tuple> implements Function<Tuple>
{
// constructors
@Override
public void prepare( FlowProcess flowProcess, OperationCall<Tuple> call )
{
// create a reusable Object with state of size 1
call.setContext( new NotThreadSafeObject() );
}
public void operate( FlowProcess flowProcess, FunctionCall<Tuple> call )
{
// ...
NotThreadSafeObject obj = call.getContext();
obj.doSomething();
Tuple tup = new Tuple();
tup.set(0,obj.getValue());
call.getOutputCollector().add(tup);
}
@Override
public void cleanup( FlowProcess flowProcess, OperationCall<Tuple> call )
{
call.setContext( null );
}
}