আমি আমার রেজিস্ট্রিতে কিছু নিয়ামককে আরম্ভ করার জন্য একটি স্ট্যাটিক কোড ব্লক ব্যবহার করছি। আমার প্রশ্নটি তাই, আমি কি গ্যারান্টি দিতে পারি যে ক্লাসটি প্রথমবার লোড হওয়ার পরে এই স্থির কোড ব্লকটি একেবারে একবারে ডাকা হবে? আমি বুঝতে পেরেছি যে এই কোড ব্লকটি কখন ডাকা হবে আমি গ্যারান্টি দিতে পারি না, ক্লাসলোডার যখন এটি প্রথম লোড করে তখন আমি এটির অনুমান করছি। আমি বুঝতে পারি যে আমি স্ট্যাটিক কোড ব্লকে ক্লাসে সিঙ্ক্রোনাইজ করতে পারি, তবে আমার ধারণা এটি আসলে কি হয় যাইহোক ঘটে?
সাধারণ কোড উদাহরণ হবে;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
বা আমার এটি করা উচিত;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}