উদাহরণে মেথডএ এবং মেথডবি হ'ল উদাহরণ পদ্ধতি (স্থির পদ্ধতির বিপরীতে)। ফেলে synchronized
একটি দৃষ্টান্ত পদ্ধতি মানে উপর থ্রেড বস্তুর উদাহরণস্বরূপ লক ( "স্বকীয় লক") যে পদ্ধতি সামনে থ্রেড যে পদ্ধতি যে কোন কোড নির্বাহ শুরু করতে পারেন উপর বলা হয় অর্জন রয়েছে।
যদি আপনার কাছে দুটি পৃথক উদাহরণ পদ্ধতি রয়েছে যা সিঙ্ক্রোনাইজড হিসাবে চিহ্নিত হয়েছে এবং বিভিন্ন থ্রেড একই পদ্ধতিতে একই পদ্ধতিগুলিকে একই সাথে কল করে, সেই থ্রেডগুলি একই লকের পক্ষে লড়াই করবে। একবার একটি থ্রেড লক হয়ে গেলে অন্যান্য সমস্ত থ্রেড সেই বস্তুর সমস্ত সিঙ্ক্রোনাইজড ইনস্ট্যান্স পদ্ধতি থেকে বন্ধ হয়ে যায়।
দুটি পদ্ধতি একই সাথে চালানোর জন্য তাদের বিভিন্ন লক ব্যবহার করতে হবে, এর মতো:
class A {
private final Object lockA = new Object();
private final Object lockB = new Object();
public void methodA() {
synchronized(lockA) {
//method A
}
}
public void methodB() {
synchronized(lockB) {
//method B
}
}
}
যেখানে সিঙ্ক্রোনাইজড ব্লক সিনট্যাক্স একটি নির্দিষ্ট অবজেক্ট নির্দিষ্ট করার অনুমতি দেয় যা ব্লকটিতে প্রবেশের জন্য এক্সিকিউটেড থ্রেডকে অভ্যন্তরীণ লকটি অর্জন করতে হবে।
বুঝতে গুরুত্বপূর্ণ বিষয়টি হ'ল যদিও আমরা পৃথক পদ্ধতিতে একটি "সিঙ্ক্রোনাইজড" কীওয়ার্ড রাখছি, মূল ধারণাটি পর্দার আড়ালে অন্তর্গত লক।
এখানে কিভাবে হয় জাভা টিউটোরিয়াল সম্পর্ক বর্ণনা
সিঙ্ক্রোনাইজেশন একটি অভ্যন্তরীণ সত্তা চারপাশে নির্মিত হয় যা অন্তর্নিহিত লক বা মনিটর লক হিসাবে পরিচিত। (এপিআই স্পেসিফিকেশন প্রায়শই এই সত্তাকে কেবল "মনিটর" হিসাবে উল্লেখ করে) অন্তর্নিহিত লকগুলি সিঙ্ক্রোনাইজেশনের উভয় দিকগুলিতে ভূমিকা রাখে: কোনও বস্তুর রাজ্যে একচেটিয়া অ্যাক্সেস প্রয়োগ করা এবং দৃশ্যমানতার জন্য প্রয়োজনীয় অপরিহার্য সম্পর্কগুলির আগেই সম্পর্ক স্থাপন করা।
প্রতিটি বস্তুর সাথে এর সাথে যুক্ত একটি অন্তর্গত লক রয়েছে has কনভেনশন অনুসারে, কোনও থ্রেডের জন্য যা কোনও বস্তুর ক্ষেত্রগুলিতে একচেটিয়া এবং ধারাবাহিক অ্যাক্সেসের প্রয়োজন সেগুলিতে অ্যাক্সেস করার আগে অবজেক্টের অভ্যন্তরীণ লকটি অর্জন করতে হবে এবং তার সাথে সম্পন্ন হওয়ার পরে তার অভ্যন্তরীণ লকটি প্রকাশ করতে হবে। কোনও থ্রেড লকটি অর্জন এবং লকটি প্রকাশের সময়ের মধ্যে অভ্যন্তরীণ লকটির মালিক বলে বলা হয়। যতক্ষণ কোনও থ্রেড অভ্যন্তরীণ লকের মালিক, অন্য কোনও থ্রেড একই লকটি অর্জন করতে পারে না। অন্য থ্রেডটি লকটি অর্জন করার চেষ্টা করলে এটি অবরুদ্ধ হবে।
লক করার উদ্দেশ্য ভাগ করা ডেটা রক্ষা করা। উপরের উদাহরণ কোডে প্রদর্শিত আলাদা আলাদা লকগুলি কেবলমাত্র যদি প্রতিটি লক বিভিন্ন ডেটা সদস্যকে সুরক্ষিত রাখে use