Saya sedang membaca dokumentasi cascading bab 5.2 Fungsi dan saya ingin tahu apa yang akan terjadi dengan kode berikut. Haruskah ini berfungsi dengan baik di lingkungan multithread? Pertanyaan yang lebih umum adalah apakah Fungsinya bisa multithread? seperti yang saya tahu, mapper tunggal berulir tunggal.
Secara khusus saya telah menguji kode tersebut dan menurut saya ini tidak aman untuk thread. Mungkin saya kurang memahami dengan baik dokumentasi di halaman (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 );
}
}