অপেক্ষা () এবং ঘুমের মধ্যে পার্থক্য ()


1203

থ্রেডসের মধ্যে wait()এবং এর sleep()মধ্যে পার্থক্য কী ?

আমার বোঝা যাচ্ছে যে wait()আং-থ্রেডটি এখনও চলমান মোডে রয়েছে এবং সিপিইউ চক্র ব্যবহার করে তবে sleep()আইং কোনও সিপিইউ চক্র সঠিকভাবে গ্রহণ করে না?

আমাদের উভয়ই কেন wait()এবং sleep()কীভাবে নিম্ন প্রয়োগে তাদের প্রয়োগ কার্যকর হয়?


50
খুব ভাল প্রশ্ন। উভয়ের শব্দার্থবিজ্ঞান বিভ্রান্ত করা সহজ।
আন্দ্রেয় পিটারসন

1
খুব সুন্দর প্রশ্ন তবে তারা একের মধ্যে 2। আমাদের দু'জনের কীভাবে নিম্ন স্তরে প্রয়োগ করা যেতে পারে (এবং তা নয়!) একই রকম নয়। আমিও এর জবাব দিয়েছি।
এস্তানি

ধরুন একটি থ্রেড এ সিঙ্ক্রোনাইজড ব্লকে আছে এবং এটি সিপুতে থাকাকালীন এই থ্রেডটি নেওয়া হবে এবং অন্য থ্রেড বিতে দেওয়া হবে এখন থ্রেড এ কোন অবস্থায় যাবে, এই সুসংগত ব্লকের অপেক্ষায় থাকা অন্য থ্রেডগুলি কি এখনই ভিতরে চলে আসবে? ?
পিটার

1
এখানে এটি বর্ণনা করার জন্য একটি ভাল নিবন্ধ: qat.com/using-waitnotify-instead-thread-sleep-java
ট্রাইটন ম্যান

3
এর একেবারে বিপরীত - ঘুম তার উপলব্ধ সিপিইউ-চক্রগুলির সমস্ত "ব্যবহার" করে তবে যেহেতু থ্রেডটি "অপেক্ষায়" থাকবে - প্রয়োজনে এগুলি উত্পাদিত হতে পারে - বাস্তবে বেশিরভাগ অপারেটিং সিস্টেমগুলি যদি সম্ভব হয় তবে চক্রটি স্বয়ংক্রিয়ভাবে ফলন করে , আপনার থ্রেডটি কোনও আসল সিপিইউ-লোড তৈরি করবে না ... এটি পুরানো অপারেটিং সিস্টেমগুলিতে এটি করবে though অন্যদিকে অবজেক্ট.ওয়েট () কখনই কোনও চক্র ব্যবহার করে না (অবহিত অবস্থায় থাকাকালীন) কারণ জেভিএম দ্বারা প্রয়োগকৃত ব্যক্তিগত, ক্ষণস্থায়ী এবং স্বচ্ছ লকগুলি অনেক ক্ষেত্রেই সফ্টওয়্যার-বিঘ্নিত হয়ে উপলব্ধি করে। থ্রেড.স্লিপ খারাপ অভ্যাস।
বিশেষায়িত

উত্তর:


837

একজন waitঅন্য থ্রেড কল করে "আপ woken" করা যেতে পারে notifyমনিটর যা যেহেতু একটি উপর ঢুকে হচ্ছে তার উপর sleepকরতে পারেন না। মনিটর অবজেক্টের একটি ব্লকে একটি wait(এবং notify) অবশ্যই ঘটতে হবে synchronizedযেখানে sleepনা:

Object mon = ...;
synchronized (mon) {
    mon.wait();
} 

এই মুহুর্তে বর্তমানে সম্পাদনকারী থ্রেড অপেক্ষা করে এবং মনিটরটি প্রকাশ করে । অন্য থ্রেড পারে

synchronized (mon) { mon.notify(); }

(একই monঅবজেক্টে) এবং প্রথম থ্রেড (ধরে নেওয়া এটি মনিটরের অপেক্ষার একমাত্র থ্রেড) জেগে উঠবে।

এছাড়াও আপনি কল করতে পারেন notifyAllযদি একাধিক থ্রেড মনিটরে অপেক্ষা করছে - এই জেগে উঠবে তাদের সব আপ । তবে, থ্রেডগুলির মধ্যে কেবল একটি মনিটরটি ধরে রাখতে সক্ষম হবে (মনে রাখবেন যে এটি waitএকটি synchronizedব্লকের মধ্যে রয়েছে) এবং চালিয়ে যেতে পারে - অন্যগুলি ততক্ষণ অবরুদ্ধ করা হবে যতক্ষণ না তারা মনিটরের লকটি অর্জন করতে পারে।

আর একটি বিষয় হ'ল আপনি নিজেই কল waitকরেন Object(যেমন আপনি কোনও বস্তুর মনিটরের জন্য অপেক্ষা করেন) যেখানে আপনি কল sleepকরেন Thread

তবুও অন্য বিন্দু যে আপনি পেতে পারেন হয় কৃত্রিম wakeups থেকে wait(অর্থাত থ্রেড যা কোন আপাত কারণে পুনরায় শুরু অপেক্ষা করছে)। আপনার নীচের হিসাবে কিছু শর্তে সর্বদা waitঘুরতে হবে :

synchronized {
    while (!condition) { mon.wait(); }
}

131
না, এটা পারে না। এটি কেবল বাধা দেওয়া যেতে পারে।
পিটার btibraný

9
আপনি যখন বাধা দিচ্ছেন, আপনাকে অবশ্যই জানতে হবে যে কোন থ্রেডটি আপনাকে বাধা দিতে চায়। আপনি যখন বিজ্ঞপ্তি বলছেন তখন আপনাকে কেবল অবজেক্টের প্রয়োজন হবে এবং অন্য কোনও থ্রেড রয়েছে যা এই অবজেক্টটির জন্য অপেক্ষা করে you ওয়েট / নোটিফাই যোগাযোগের জন্য ব্যবহৃত হয়, যখন ঘুমটি হ'ল, এহেম, স্লিপিংয়ের জন্য ব্যবহৃত হয়।
পিটার btibraný

28
@ গীক - বিশ্বে আপনি কেন বলেন অপেক্ষা () সিপিইউ চক্রকে নষ্ট করে?
রবার্ট মুন্তানু

25
বাধা হ'ল একটি থ্রেডটি সম্পূর্ণরূপে চলমান বন্ধ করতে এবং অবশিষ্ট ক্রিয়াকলাপ বাতিল করতে উত্সাহিত করার ব্যবস্থা হিসাবে। wait/ notifyসাধারণত কোনও টাস্কটি সম্পাদনের জন্য অন্য কোনও থ্রেডের জন্য অপেক্ষা করতে বা কোনও নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত অপেক্ষা করার জন্য ব্যবহৃত হয়।
লুই ওয়াসারম্যান

13
আমি সমস্ত উত্তর পড়েছি তবে এখনও আমি কিছুটা অনুপস্থিত তথ্য অনুভব করছি। অনেকে জাভাডোক থেকে সংজ্ঞা এবং দুটি ইংরাজির শব্দের অর্থ লিখেছিলেন তবে আমি কেন অপেক্ষা করি না কেন আমাকে কখনই অপেক্ষা করা উচিত? দুজনের মধ্যে বেঞ্চমার্কিং এবং গতির পার্থক্য কী? আমি যদি ঘুমের সাথে করতে পারি এমন সব কিছু করতে পারি তবে কেন আমি কখনই ঘুম পছন্দ করব?
বালাজস জেডল্ডোস

334

একটি মূল পার্থক্য যা এখনও উল্লেখ করা হয়নি তা হ'ল একটি থ্রেড ঘুমানোর সময় এটি ধারণ করা লকগুলি ছেড়ে দেয় না , যখন অপেক্ষা করা অবজেক্টটির লকটি wait()প্রকাশ করে।

synchronized(LOCK) {
    Thread.sleep(1000); // LOCK is held
}


synchronized(LOCK) {
    LOCK.wait(); // LOCK is not held
}

105
অপেক্ষা কেবলমাত্র সেই অবজেক্টের জন্য লক প্রকাশ করে যা আপনি কল করেন ()। এটি অন্য কোনও লক প্রকাশ করে না ।
জন স্কিটি

16
আপনাকে আসলে কোনও তালাবন্ধের মধ্য দিয়েই ঘুমের ডাক দেওয়ার দরকার নেই - লকগুলি এবং অপেক্ষা / নোটিশটি হাতে নিয়ে যেতে হবে তবে তালা এবং ঘুম সম্পর্কিত নয়।
অক্সবো_লেকস

7
@ অক্সবো_লাকস - আমি বলব যে আপনি লক দিয়ে ঘুমোবেন না, এর ব্যবহারের খুব কম কেস রয়েছে। শুধু পার্থক্যগুলি নির্দেশ করতে চেয়েছিলেন।
রবার্ট মুন্তানু

5
@RobertMunteanu, আপনার উত্তর misleadingly দাবী করেন যে sleepঝুলিতে জাভা কেশ, কিন্তু এটা না। একটি ন্যায্য তুলনা করার ইচ্ছা করি; তুলনা হবে synchronized(OUTER_LOCK){ Thread.sleep(1000); }সঙ্গে synchronized(OUTER_LOCK){ synchronized(LOCK){LOCK.wait();} }এবং আমরা দেখতে পারি উভয় নির্দেশাবলী মুক্তি না OUTER_LOCK। যদি কোনও পার্থক্য থাকে, আমরা বলতে পারি যে sleepস্পষ্টভাবে জাভা লক ব্যবহার করে না , তবে প্রশ্নটি "আপনার প্রয়োগটি নিম্ন স্তরে কীভাবে পরিবর্তিত হয়?" উদ্ধতি।
পেসারিয়ার

2
@ পেসারিয়রটি wait()আপনার কোড উদাহরণে, অভ্যন্তরীণ সর্বাধিক লক থেকে কল করা শর্তের সাথে সম্পর্কিত, wait()এটি কেবল মুক্তি দিতে পারে LOCKএবং নাও করতে পারে OUTER_LOCK। জাভা মনিটর যেভাবেই ডিজাইন করা হয়েছে। একটি ন্যায্য তুলনা হবে synchronized(OUTER_LOCK){ synchronized(LOCK) { Thread.sleep(1000); } }এবং synchronized(OUTER_LOCK){ synchronized(LOCK) { LOCK.wait(); } }। এই ক্ষেত্রে sleep()উভয় কেশ যখন রাখা হবে wait()মুক্তি দেয়া হবে LOCKকিন্তু এখনও রাখাOUTER_LOCK
danze

243

আমি এই পোস্টে সহায়ক বলে মনে করি। এটা তোলে পার্থক্য রাখে Thread.sleep(), Thread.yield()এবং Object.wait()মানব পরিপ্রেক্ষিতে। উদ্ধৃতি থেকে:

এটি সবশেষে ওএসের শিডিয়ুলারের দিকে চলে যায়, যা প্রক্রিয়া এবং থ্রেডগুলিতে টাইমস্লাইসগুলি সরবরাহ করে।

sleep(n)বলেছেন "আমি আমার টাইমলাইসটি সম্পন্ন করেছি এবং দয়া করে কমপক্ষে এন মিলিসেকেন্ডের জন্য আমাকে আর একটি দেবেন না” " ওএস অনুরোধের সময়টি না কাটা পর্যন্ত ঘুমের থ্রেডের সময়সূচী করার চেষ্টা করে না।

yield()বলেছেন "আমি আমার টাইমলাইসটি সম্পন্ন করেছি, তবে এখনও আমার কাজ করার আছে” " ওএস তাত্ক্ষণিকভাবে থ্রেডটিকে আরেকবার টাইমলাইস দিতে বা অন্য কোনও থ্রেড দিতে বা সিপিইউকে ফলনযোগ্য থ্রেডটি সবে ছেড়ে দেওয়ার জন্য মুক্ত।

wait()বলেছেন “আমি আমার টাইমলাইস দিয়ে শেষ করেছি। কেউ আমাকে () অবহিত না করা পর্যন্ত আমাকে আর একটি টাইমলাইস দিবেন না ”" যেমনটি হয় sleep(), ওএস আপনার কাজটি নির্ধারণ করার চেষ্টা করবে না যতক্ষণ না কেউ কল করে notify()(বা অন্য কয়েকটি জাগ্রতের পরিস্থিতি দেখা দেয়)।

থ্রেডগুলি তাদের টাইমলাইসের বাকী অংশগুলিও হারাতে থাকে যখন তারা ব্লকিং আইও এবং অন্যান্য কয়েকটি পরিস্থিতিতে ব্লক করে। যদি কোনও থ্রেড পুরো টাইমলাইসের মধ্য দিয়ে কাজ করে তবে ওএস জোর করে নিয়ন্ত্রণ করা হয় যেমন yield()আহ্বান জানানো হয়েছিল, যাতে অন্যান্য প্রক্রিয়া চলতে পারে।

আপনার খুব কমই প্রয়োজন হয় yield()তবে আপনার যদি যৌক্তিক কার্য সীমানা সহ একটি গণনা-ভারী অ্যাপ্লিকেশন থাকে তবে সিস্টেমের প্রতিক্রিয়াটি উন্নত করতে yield() পারে এমন একটি সন্নিবেশ করা (সময়ের ব্যয়ে - প্রসঙ্গের স্যুইচগুলি এমনকি ওএস এবং পিছনেও বিনামূল্যে নয়)। বরাবরের মতো আপনার লক্ষ্য লক্ষ্য করা যায় তার বিরুদ্ধে পরিমাপ করুন এবং পরীক্ষা করুন।


ফলন মূলত প্ল্যাটফর্ম-নির্ভর ... javamex.com/tutorials/threads/yield.shtml
পেসারিয়ার

এর ব্যাখ্যার sleep(n)স্পষ্টতই বলা হচ্ছে যে বর্তমানে চলমান থ্রেডটি স্বেচ্ছায় লকের মনিটরটিকে ত্যাগ করে, যা সত্য নয়থ্রেডের জাভাদোক থেকে উদ্ধৃতি : "থ্রেডটি কোনও মনিটরের মালিকানা হারাবে না।"
ক্লিন্ট ইস্টউড

2
@ জোনাথন এর উত্তরে মনিটরের উল্লেখ নেই, এবং এটি কারণ যে sleepকোনও জাভা পদ্ধতি কলের চেয়ে মনিটরের বিষয়ে বিশেষ আচরণ নেই, অর্থাৎ এটি কোনওভাবেই তাদের সাথে ইন্টারেক্ট বা সংশোধন করে না। আপনি যদি মনিটরদের সম্পর্কে কিছু বলতে চান তবে আপনার অবশ্যই সেই ইচ্ছাটি নির্দিষ্ট করতে waitহবে, উপরে বর্ণিত বিষয়গুলির পাশাপাশি, যে বস্তুটির উপরে ডাকা হয়েছে তাতে অস্থায়ীভাবে লক ছেড়ে দিন।
pqnet

ওএস শিডিউলার স্তরে কীভাবে বিজ্ঞপ্তিটি কাজ করবে? নির্দিষ্ট থ্রেড আইডি সহ কোনও ধরণের ইভেন্ট হ্যান্ডলারের কলকে সূচিত করে, শিডিয়ুলার প্রাসঙ্গিক থ্রেডটি চলমান কাতারে ফিরে যেতে দেয়? এছাড়াও আমার আরও একটি প্রশ্ন রয়েছে, স্পিনলকের ধারণাটি কোথায় ফিট করে? এটি কি কেবল ঘুমের জন্য প্রাসঙ্গিক হবে বা খুব কম স্তরে স্পিনলক ব্যবহারের জন্য অপেক্ষা করতে হবে?
সিএমসিডিগ্রাগনকাই

@ এরিক, wait(n)তুলনা করতে ব্যবহার করুন sleep(n)। নো-আরগ ব্যবহার করে তুলনা করার কোনও ধারণা নেই।
পেসারিয়ার

68

এখানে প্রচুর উত্তর রয়েছে তবে আমি কোনওটির উপরে বর্ণিত শব্দার্থক পার্থক্যটি খুঁজে পেলাম না।

এটি নিজেই সুতোর নয়; উভয় পদ্ধতিই প্রয়োজনীয় কারণ তারা খুব পৃথক ব্যবহারের ক্ষেত্রে সমর্থন করে।

sleep()থ্রেডটিকে আগের মতো ঘুমাতে প্রেরণ করে, এটি কেবল প্রসঙ্গটি প্যাক করে এবং একটি পূর্বনির্ধারিত সময়ের জন্য কার্যকর করা বন্ধ করে দেয়। তাই নির্ধারিত সময়ের আগে এটি জাগ্রত করতে আপনার থ্রেডের রেফারেন্সটি জানতে হবে। বহু-থ্রেডযুক্ত পরিবেশে এটি সাধারণ পরিস্থিতি নয়। এটি বেশিরভাগ সময়-সিনক্রোনাইজেশনের জন্য ব্যবহৃত হয় (উদাহরণস্বরূপ ঠিক ৩.৫ সেকেন্ডে জাগ্রত হওয়া) এবং / অথবা হার্ড-কোডড ফর্সা (কেবল কিছুক্ষণ ঘুমোুন এবং অন্যকে থ্রেডগুলি কাজ করতে দিন)।

wait()বিপরীতে, এটি একটি থ্রেড (বা বার্তা) সিঙ্ক্রোনাইজেশন প্রক্রিয়া যা আপনাকে এমন কোনও থ্রেডকে অবহিত করতে দেয় যা সম্পর্কে আপনার কোনও সঞ্চয় রেফারেন্স নেই (না যত্ন)। আপনি এটিকে প্রকাশ-সাবস্ক্রাইব প্যাটার্ন ( wait== সাবস্ক্রাইব এবং notify()== প্রকাশ) হিসাবে ভাবতে পারেন । মূলত অবহিত করুন () ব্যবহার করে আপনি একটি বার্তা প্রেরণ করছেন (এটি এমনকি আদৌ পাওয়া যায় না এবং সাধারণত আপনার যত্ন নেই)।

সংক্ষেপে, আপনি সাধারণত sleep()সময় wait()-সিঙ্ক্রোনাইজেশনের জন্য এবং মাল্টি-থ্রেড-সিঙ্ক্রোনাইজেশনের জন্য ব্যবহার করেন।

এগুলি অন্তর্নিহিত ওএসে একই পদ্ধতিতে প্রয়োগ করা যেতে পারে, বা মোটেও নয় (জাভার আগের সংস্করণগুলির আসল মাল্টিথ্রেডিং ছিল না; সম্ভবত কিছু ছোট ভিএমও তা করে না)। জাভা কোনও ভিএম-তে চালিত হয় তা ভুলে যাবেন না, সুতরাং আপনার কোডটি যে ভিএম / ওএস / এইচডাব্লুটি চলছে তার অনুসারে অন্যরকম কিছুতে রূপান্তরিত হবে।


54

এখানে, আমি wait()এবং sleep()পদ্ধতির মধ্যে কয়েকটি গুরুত্বপূর্ণ পার্থক্য তালিকাভুক্ত করেছি ।
PS: এছাড়াও লাইব্রেরি কোড দেখতে লিঙ্কগুলিতে ক্লিক করুন (অভ্যন্তরীণ কাজ, আরও ভাল বোঝার জন্য কেবল কিছুটা খেলুন)।

অপেক্ষা করুন ()

  1. wait() পদ্ধতি লক প্রকাশ করে।
  2. wait()Objectক্লাস পদ্ধতি ।
  3. wait() অ স্থির পদ্ধতি - public final void wait() throws InterruptedException { //...}
  4. wait()notify()বা notifyAll()পদ্ধতি দ্বারা অবহিত করা উচিত ।
  5. wait() মিথ্যা বিপদাশঙ্কা মোকাবেলার জন্য একটি লুপ থেকে পদ্ধতিটি কল করা দরকার।

  6. wait() পদ্ধতিটি সিঙ্ক্রোনাইজ করা প্রসঙ্গ (যেমন সিঙ্ক্রোনাইজড পদ্ধতি বা ব্লক) থেকে কল করতে হবে, অন্যথায় এটি নিক্ষেপ করবে IllegalMonitorStateException

ঘুম()

  1. sleep() পদ্ধতিটি লকটি প্রকাশ করে না।
  2. sleep()java.lang.Threadক্লাস পদ্ধতি ।
  3. sleep() স্থির পদ্ধতি - public static void sleep(long millis, int nanos) throws InterruptedException { //... }
  4. নির্দিষ্ট সময় পরে, sleep()সম্পন্ন হয়।
  5. sleep()লুপ থেকে কল না করাই ভাল (যেমন নীচের কোডটি দেখুন )।
  6. sleep()যে কোনও জায়গা থেকে ফোন করা যেতে পারে। কোন নির্দিষ্ট প্রয়োজন নেই।

উত্তর: অপেক্ষা এবং ঘুমের মধ্যে পার্থক্য

অপেক্ষা ও ঘুমের পদ্ধতি কল করার জন্য কোড স্নিপেট

synchronized(monitor){
    while(condition == true){ 
        monitor.wait()  //releases monitor lock
    }

    Thread.sleep(100); //puts current thread on Sleep    
}

বিভিন্ন থ্রেডের রাজ্যে থ্রেড রূপান্তর


এটি কি সঠিক যে কোনও ঘুমের থ্রেডটি অবহিত করা যেতে পারে কলকে অবহিত করার জন্য ()? এখানের অন্যান্য পোস্টগুলির মধ্যে এমন কিছু মনে হচ্ছে যে ঘুমের থ্রেড জাগ্রত হতে পারে তবে বাধা দেওয়া যায় না।
বেরিম্বোলো

হ্যাঁ, Thread.sleep()অন্য থ্রেডগুলিতে প্রসেসরের সময় উপলব্ধ করার জন্য ব্যবহৃত হয় is ঘুমের সময় বাধা (যেমন জেভিএম দ্বারা) দ্বারা শেষ করা যেতে পারে। এই পড়ুন stackoverflow.com/questions/4264355/...
roottraveller

এই পোস্টটি বাধাও বলেছে () ঘুমের সুতোটি কী জাগায়? আমি আপনার পোস্ট করা থ্রেড স্টেট ডায়াগ্রামের কথা উল্লেখ করছিলাম যেখানে এটিতে বিজ্ঞপ্তি দেওয়া বা বিজ্ঞপ্তি জানানো হয়েছে সমস্ত ঘুমানোর (অপেক্ষা না করা) থ্রেডটি চালানোর জন্য ফিরে আসবে। আমি নিশ্চিত হয়েছি যে আমি এটি বুঝতে পেরেছি।
berimbolo

@berimbolo notify()বা notifyAll()হয় Objectবর্গ পদ্ধতি। সুতরাং তারা উপলব্ধ সমস্ত শ্রেণীর আপত্তি করবে (যেমন এখানে Threadবর্গ সহ )। কোডটি দেখুন grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…
রুটট্রাভেলার

2
ঠিক আছে আমাকে থ্রেড শিডিয়ুলিংয়ে আরও পড়তে হবে কারণ আমি বিজ্ঞপ্তি () বা বিজ্ঞপ্তি (()) ঘুমানোর থ্রেড জাগানো কেবল এটির মধ্যে বাধাগ্রস্থ হওয়ার () উদাহরণ পাই না। সমস্ত উদাহরণ কোনও মনিটর অবজেক্টের অপেক্ষায় থাকা থ্রেডগুলিতে বিজ্ঞপ্তি () এবং notifyAll () সম্পর্কিত rela
বেরিম্বোলো

29

অপেক্ষা এবং ঘুমের পরে কাজ করার পরে আমি কিছু পার্থক্য কী নোটগুলি পেয়েছি, প্রথমে অপেক্ষা () এবং ঘুম () ব্যবহার করে নমুনাটি দেখুন:

উদাহরণ 1 : অপেক্ষা () এবং ঘুম () ব্যবহার করে:

synchronized(HandObject) {
    while(isHandFree() == false) {
        /* Hand is still busy on happy coding or something else, please wait */
        HandObject.wait();
    }
}

/* Get lock ^^, It is my turn, take a cup beer now */
while (beerIsAvailable() == false) {
    /* Beer is still coming, not available, Hand still hold glass to get beer,
       don't release hand to perform other task */
    Thread.sleep(5000);
}

/* Enjoy my beer now ^^ */
drinkBeers();

/* I have drink enough, now hand can continue with other task: continue coding */
setHandFreeState(true);
synchronized(HandObject) {
    HandObject.notifyAll();
}

কিছু মূল নোট পরিষ্কার করুন:

  1. কল করুন :
    • অপেক্ষা (): হ্যান্ডওবজেক্ট অবজেক্টটি ধারণ করে বর্তমান থ্রেডে কল করুন
    • ঘুম (): কল অন থ্রেড এক্সিকিউট টাস্ক টাস্ক বিয়ার পান (এটি ক্লাসের পদ্ধতি তাই বর্তমান চলমান থ্রেডে প্রভাবিত)
  2. সিঙ্ক্রোনাইজড :
    • অপেক্ষা (): যখন একত্রে বহু থ্রেড অ্যাক্সেস একই অবজেক্ট (হ্যান্ডোবজেক্ট) (যখন একাধিক থ্রেডের মধ্যে যোগাযোগের প্রয়োজন হয় (থ্রেড এক্সিকিউট কোডিং, থ্রেড এক্সিকিউট এক্সট্রা বিয়ার পান) একই বস্তুর হ্যান্ডবজেক্টে অ্যাক্সেস)
    • ঘুম (): চালানো চালিয়ে যাওয়ার অপেক্ষার সময় (অপেক্ষা বিয়ার উপলব্ধ)
  3. হোল্ড লক :
    • অপেক্ষা (): অন্যান্য বস্তুর জন্য লকটি প্রকাশের কার্যকর করার সুযোগ রয়েছে (হ্যান্ডওবজেক্টটি নিখরচায়, আপনি অন্য কাজ করতে পারেন)
    • ঘুম (): কমপক্ষে t ​​বার লক রাখুন (বা বিঘ্ন না হওয়া পর্যন্ত) (আমার কাজ এখনও শেষ হচ্ছে না, আমি লক ধরে রেখেছি এবং কিছু শর্ত অব্যাহত রাখার জন্য অপেক্ষা করছি)
  4. জাগ্রত শর্ত :
    • অপেক্ষা (): অবধি কল থেকে বিজ্ঞপ্তি (), notifyAll () অবধি
    • ঘুম (): কমপক্ষে সময় শেষ না হওয়া বা কল বিঘ্নিত হওয়া পর্যন্ত
  5. এবং শেষ পয়েন্টটি যখন এস্তানি হিসাবে চিহ্নিত হয়:

আপনি সাধারণত সময়-সিঙ্ক্রোনাইজেশনের জন্য ঘুম () ব্যবহার করেন এবং মাল্টি-থ্রেড-সিঙ্ক্রোনাইজেশনের জন্য অপেক্ষা করুন ()।

আমি ভুল হলে আমাকে সংশোধন করুন।


25

অপেক্ষা () এবং ঘুমের মধ্যে পার্থক্য ()

  • মৌলিক পার্থক্য হল wait()থেকে Objectএবং sleep()একটি স্ট্যাটিক পদ্ধতি Thread

  • প্রধান পার্থক্য হ'ল wait()লকটি sleep()প্রকাশ করে যখন অপেক্ষা করার সময় কোনও লক প্রকাশ করে না।

  • wait()আন্তঃ-থ্রেড যোগাযোগের sleep()জন্য ব্যবহৃত হয় যখন সাধারণত কার্যকরভাবে মৃত্যুর বিরতি প্রবর্তন করতে ব্যবহৃত হয়।

  • wait()সিঙ্ক্রোনাইজের অভ্যন্তর থেকে কল করা উচিত অন্যথায় আমরা একটি পাই IllegalMonitorStateException, যখনই sleep() কোথাও ফোন করা যায়।

  • আবার থ্রেড শুরু করতে wait(), আপনাকে কল করতে হবে notify()বা notifyAll()। হিসাবে sleep(),থ্রেড একটি নির্দিষ্ট সময়ের ব্যবধানে পর শুরু হয়।

মিল

  • উভয়ই বর্তমান থ্রেডটি চালানো যায় না এমন অবস্থায় চলে যায়।
  • উভয়ই দেশীয় পদ্ধতি।

18

এটি একটি খুব সাধারণ প্রশ্ন, কারণ এই দুটি পদ্ধতিরই সম্পূর্ণ আলাদা ব্যবহার রয়েছে।

প্রধান পার্থক্য হ'ল লকটি রিলিজ করা বা মনিটরের অপেক্ষার সময় ঘুম কোনও লক বা মনিটর প্রকাশ করে না। আন্তঃ-থ্রেড যোগাযোগের জন্য অপেক্ষা করা হয় যখন ঘুম প্রয়োগের ক্ষেত্রে বিরতি প্রবর্তন করতে ব্যবহৃত হয়।

এটি কেবল একটি পরিষ্কার এবং মৌলিক ব্যাখ্যা ছিল, আপনি যদি এর চেয়ে আরও বেশি কিছু চান তবে পড়া চালিয়ে যান।

wait()পদ্ধতির থ্রেডের ক্ষেত্রে অপেক্ষার স্থানে চলে যায় এবং আমরা notify()পদ্ধতিটি কল না করা পর্যন্ত এটি স্বয়ংক্রিয়ভাবে ফিরে আসবে না (বা notifyAll()আপনার যদি আরও কিছু থাকে তবে অপেক্ষার স্থানে একটি থ্রেড থাকে এবং আপনি সেই সমস্ত থ্রেড জাগাতে চান)। আর তুমি সিঙ্ক্রোনাইজ বা বস্তুর লক বা বর্গ লক ব্যবহার করার দরকার wait()বা notify()বা notifyAll()পদ্ধতি। এবং আরও একটি জিনিস,wait() পদ্ধতিটি আন্ত-থ্রেড যোগাযোগের জন্য ব্যবহৃত হয় কারণ যদি কোনও থ্রেড অপেক্ষার স্থানে যায় তবে সেই থ্রেডটি জাগাতে আপনার আরও একটি থ্রেডের প্রয়োজন হবে।

তবে এর ক্ষেত্রে sleep()এমন একটি পদ্ধতি যা প্রক্রিয়াটি কয়েক সেকেন্ড বা আপনি যে সময় চেয়েছিলেন তা ধরে রাখার জন্য ব্যবহৃত হয়। কারণ সেই থ্রেডটি ফিরে পেতে আপনার কোনও notify()বা notifyAll()পদ্ধতি উস্কে দেওয়ার দরকার নেই । অথবা এই থ্রেডটি আবার কল করতে আপনার অন্য কোনও থ্রেডের দরকার নেই। আপনি যদি চান কিছু সেকেন্ড পরে কিছু হওয়া উচিত যেমন ব্যবহারকারীর ঘুরিয়ে যাওয়ার পরে কোনও গেমের মতো আপনি চান যে কম্পিউটারটি না খেলে ব্যবহারকারী অপেক্ষা করুক তবে আপনি sleep()পদ্ধতিটি উল্লেখ করতে পারবেন ।

এবং আরো একটি গুরুত্বপূর্ণ পার্থক্য যা সাক্ষাত্কারে প্রায়ই জিজ্ঞাসা করা হয়: sleep()জন্যে Threadশ্রেণী এবং wait()জন্যে Objectবর্গ।

এই মধ্যে সব পার্থক্য আছে sleep()এবং wait()

এবং উভয় পদ্ধতির মধ্যে সাদৃশ্য রয়েছে: সেগুলি উভয়ই বিবৃতিতে পরীক্ষিত হয় যাতে এই পদ্ধতিগুলি অ্যাক্সেস করার জন্য আপনার ক্যাচ চেষ্টা বা নিক্ষেপ করতে হবে।

আমি আশা করি এটা তোমাকে সাহায্য করবে।


16

উত্স: http://www.jguru.com/faq/view.jsp?EID=47127

Thread.sleep()কিছু সময়ের জন্য বর্তমান থ্রেডটিকে "চলমান নয়" অবস্থায় প্রেরণ করে । থ্রেডটি মনিটরগুলিকে অধিগ্রহণ করে রাখে - যেমন থ্রেডটি বর্তমানে সিঙ্ক্রোনাইজড ব্লক বা পদ্ধতিতে থাকলে অন্য কোনও থ্রেড এই ব্লক বা পদ্ধতিতে প্রবেশ করতে পারে না। অন্য থ্রেড যদি কল t.interrupt()করে তবে এটি ঘুমের সুতার জাগবে।

নোট করুন যে ঘুম একটি স্থিতিশীল পদ্ধতি, যার অর্থ এটি সর্বদা বর্তমান থ্রেডকে প্রভাবিত করে (ঘুমন্ত পদ্ধতিটি যেটি কার্যকর করছে)। একটি সাধারণ ভুলটি কল করা t.sleep()যেখানে টি আলাদা থ্রেড; তারপরেও এটি বর্তমান থ্রেডটি ঘুমাবে, টি থ্রেড নয়।

t.suspend()অবচয় করা হয়। এটি ব্যবহার করে বর্তমান থ্রেড ব্যতীত অন্য কোনও থ্রেড থামানো সম্ভব। একটি স্থগিত থ্রেড তার সমস্ত মনিটর রাখে এবং যেহেতু এই রাজ্যটি বাধাপ্রাপ্ত হয় না এটি অচল প্রবণ pr

object.wait()বর্তমান থ্রেডটিকে "চলমানযোগ্য নয়" অবস্থায় প্রেরণ করে যেমন sleep()একটি মোচড় দিয়ে। থ্রেড নয়, কোনও বস্তুর উপরে অপেক্ষা করা হয়; আমরা এই বস্তুকে "লক অবজেক্ট" বলি। lock.wait()ডাকা হওয়ার আগে , বর্তমান থ্রেডটি অবশ্যই লক অবজেক্টে সিঙ্ক্রোনাইজ করতে হবে; wait() তারপরে এই লকটি প্রকাশ করে এবং লকটির সাথে যুক্ত "অপেক্ষার তালিকায়" থ্রেড যুক্ত করে। পরে, অন্য থ্রেড একই লক অবজেক্ট এবং কলটিতে সিঙ্ক্রোনাইজ করতে পারে lock.notify()। এটি মূল, অপেক্ষার থ্রেডকে জাগায়। মূলত wait()/ / notify()এর মত sleep()/ interrupt(), কেবল সক্রিয় থ্রেডের স্লিপিং থ্রেডের জন্য সরাসরি পয়েন্টারের প্রয়োজন হয় না, তবে কেবল ভাগ করা লক অবজেক্টে।


14

অপেক্ষা এবং ঘুম দুটি ভিন্ন জিনিস:

  • ইন sleep()থ্রেড নির্দিষ্ট সময়কাল জন্য কাজ স্টপ।
  • ইন wait()থ্রেড কাজ পর্যন্ত বস্তুর হচ্ছে ঢুকে অন বিজ্ঞাপিত হয়, সাধারণত অন্যান্য থ্রেড দ্বারা স্টপ।

তবে আপনি একটি ঘুমের থ্রেড বাধা দিতে পারেন। সেক্ষেত্রে অপেক্ষা () অপ্রয়োজনীয় প্রকৃতির এটি সিপিইউ চক্রকেও অপচয় করে :-(
গীক

9
অপেক্ষা সিপিইউ চক্র নষ্ট করে না।
পিটার btibraný

1
@ পিটার - আমি মনে করি এটি হয়। এটি সিপিইউ চক্রের অংশের জন্য অপেক্ষা করে () এবং তারপরে ওএস সিপিইউ চক্রকে অন্য থ্রেডগুলিতে দেয়। আমি মনে করি এটি ওএস নির্ভর হতে পারে, আমি নিশ্চিত নই।
গীক

3
এটি সিপিইউ চক্র নষ্ট হয়ে গেলে অপেক্ষা () অপেক্ষা খুব নিখুঁত বাস্তবায়ন হবে। ইন্টারথ্রেড যোগাযোগের জন্য ওয়েট / নোটিফাই বেশ ব্যবহৃত হয়।
পিটার btibraný

2
@ পেসারিয়র দুটি কনস্ট্রাক্ট আলাদা উদ্দেশ্যে তৈরি করা হয়েছে। আপনি যদি কোনও থ্রেডটি ব্যবহার করেন এমন নির্দিষ্ট সময়ের sleepজন্য বন্ধ করতে চান, আপনি যদি অন্যটি wait/ ব্যবহার করেন তবে কিছু ইনপুট না আসা পর্যন্ত আপনি এটি থামতে চান notifyinterruptকোনও থ্রেডকে সিগন্যাল করার উপায় হিসাবে লক্ষ্য করা হচ্ছে যে এটি যা করছে তা করা বন্ধ করে দেওয়া উচিত এবং সমাপ্ত করা উচিত। এটি পরিচালনা করে sleep, waitতবে আই / ও ফাংশনগুলিও ব্লক করে (এবং আপনি পদ্ধতিটি কল করে একই আচরণের সাথে ফাংশনগুলি প্রয়োগ করতে পারেন Thread.interrupted())। পারফরম্যান্সের ক্ষেত্রে, ফাংশনগুলি সাধারণত তাদের নকশাকৃত লক্ষ্যটির জন্য অনুকূল হয়।
pqnet

11

sleepএর একটি পদ্ধতি Thread, waitএটি একটি পদ্ধতি Object, wait/notifyএকইভাবে জাভাতে ভাগ করা ডেটা সিঙ্ক্রোনাইজ করার একটি কৌশল ( মনিটর ব্যবহার করে ), তবে sleepনিজেকে থামিয়ে দেওয়ার থ্রেডের একটি সহজ পদ্ধতি।


8

ঘুম () এমন একটি পদ্ধতি যা প্রক্রিয়াটি কয়েক সেকেন্ড বা আপনি যে সময় চেয়েছিলেন তা ধরে রাখতে ব্যবহার করা হয় তবে অপেক্ষা () পদ্ধতির থ্রেড অপেক্ষার অবস্থায় চলে যায় এবং আমরা অবহিত () বা কল না করা পর্যন্ত এটি স্বয়ংক্রিয়ভাবে ফিরে আসবে না বা notifyAll ()।

প্রধান পার্থক্য যে অপেক্ষার () লক বা মনিটর প্রকাশ যখন ঘুম () অপেক্ষা করার সময় কোন লক বা মনিটর নয় রিলিজ করে। আন্তঃ-থ্রেড যোগাযোগের জন্য অপেক্ষা করুন যখন ঘুম কার্যকরভাবে কার্যকর করার সময় বিরতি প্রবর্তন করতে ব্যবহৃত হয়।

থ্রেড.স্লিপ () বর্তমান সময়ের থ্রেডকে কিছু সময়ের জন্য "চলমান নয়" অবস্থায় প্রেরণ করে। থ্রেড এটি অর্জন করা মনিটরের রাখে - যেমন থ্রেডটি বর্তমানে সিঙ্ক্রোনাইজড ব্লক বা পদ্ধতিতে থাকলে অন্য কোনও থ্রেড এই ব্লক বা পদ্ধতিতে প্রবেশ করতে পারে না। অন্য থ্রেড যদি t.interrupt () কে কল করে তবে এটি ঘুমের সুতার জাগ্রত হবে। নোট করুন যে ঘুম একটি স্থিতিশীল পদ্ধতি, যার অর্থ এটি সর্বদা বর্তমান থ্রেডকে প্রভাবিত করে (ঘুমন্ত পদ্ধতিটি যেটি কার্যকর করছে)। একটি সাধারণ ভুল হ'ল টি.স্লিপ () বলা যেখানে টি আলাদা থ্রেড হয়; তারপরেও এটি বর্তমান থ্রেডটি ঘুমাবে, টি থ্রেড নয়।

অবজেক্ট.ওয়েট () বর্তমান থ্রেডটিকে "চলমান নয়" অবস্থায় প্রেরণ করে ঘুমের মতো (), তবে একটি পাক দিয়ে। থ্রেড নয়, কোনও বস্তুর উপরে অপেক্ষা করা হয়; আমরা এই বস্তুকে "লক অবজেক্ট" বলি। লক.ওয়েট () বলা হওয়ার আগে, বর্তমান থ্রেডটি অবশ্যই লক অবজেক্টে সিঙ্ক্রোনাইজ করতে হবে; অপেক্ষা () তারপরে এই লকটি প্রকাশ করে এবং লকটির সাথে যুক্ত "অপেক্ষা তালিকায়" থ্রেড যুক্ত করে adds পরবর্তীতে, অন্য থ্রেড একই লক অবজেক্টে এবং কল লক.কনটিফাই () কল করতে পারে। এটি মূল, অপেক্ষার থ্রেডকে জাগায়। মূলত, অপেক্ষা () / বিজ্ঞপ্তি () ঘুমের মতো () / বিঘ্নিত (), কেবল সক্রিয় থ্রেডের স্লিপিং থ্রেডের জন্য সরাসরি পয়েন্টার প্রয়োজন হয় না, তবে কেবল ভাগ করা লক অবজেক্টে to

synchronized(LOCK) {   
   Thread.sleep(1000); // LOCK is held
}

synchronized(LOCK) {   
   LOCK.wait(); // LOCK is not held
}

উপরের সমস্ত বিষয়গুলিকে শ্রেণিবদ্ধ করা যাক:

Call on:

  • অপেক্ষা (): একটি বস্তুর উপর কল; বর্তমান থ্রেডটি অবশ্যই লক অবজেক্টে সিঙ্ক্রোনাইজ করতে হবে।
  • ঘুম (): কল একটি থ্রেড; সর্বদা বর্তমানে থ্রেড চালাচ্ছে।

Synchronized:

  • অপেক্ষা (): যখন সিঙ্ক্রোনাইজ করা হয় একাধিক থ্রেড এক এক করে একই অবজেক্টে অ্যাক্সেস করে।
  • ঘুম (): একত্রীকরণের জন্য একাধিক থ্রেডগুলি ঘুমানোর থ্রেডের ঘুমের জন্য অপেক্ষা করে।

Hold lock:

  • অপেক্ষা (): অন্যান্য বস্তুগুলি কার্যকর করার সুযোগ পাওয়ার জন্য লকটি ছেড়ে দিন।
  • ঘুম (): টাইমআউট নির্দিষ্ট করা বা কারও বাধা থাকলে কমপক্ষে t ​​বার লক রাখুন।

Wake-up condition:

  • অপেক্ষা (): অবধি কল থেকে বিজ্ঞপ্তি (), notifyAll () অবজেক্ট থেকে
  • ঘুম (): কমপক্ষে সময় শেষ না হওয়া পর্যন্ত বা কল বিঘ্নিত কল ()।

Usage:

  • ঘুম (): টাইম-সিঙ্ক্রোনাইজেশনের জন্য এবং;
  • অপেক্ষা (): মাল্টি-থ্রেড-সিঙ্ক্রোনাইজেশনের জন্য।

সূত্র: পরিবর্তন sleepএবংwait


6

সহজ কথায় বলতে গেলে অপেক্ষা করা অপেক্ষা করা থাকে যতক্ষণ না অন্য কোনও থ্রেড আপনাকে অনুরোধ করে যেখানে ঘুম নির্দিষ্ট সময়কালের জন্য "পরবর্তী বিবৃতিটি কার্যকর করবে না"।

তন্দ্রা ক্লাসে ঘুম স্থিতিশীল পদ্ধতি এবং এটি থ্রেডে পরিচালিত হয়, যেখানে অপেক্ষা () অবজেক্ট শ্রেণিতে থাকে এবং একটি বস্তুর উপরে ডাকে।

আরেকটি বিষয়, আপনি যখন কোনও বস্তুর জন্য অপেক্ষা করতে ডাকেন তখন জড়িত থ্রেডটি বস্তুটিকে সিঙ্ক্রোনাইজ করে এবং তারপরে অপেক্ষা করে। :)


1
তোমার দুজনের দরকার কেন? ঘুম কেন যথেষ্ট নয়?
গীক

2
থ্রেডগুলির মধ্যে যোগাযোগের জন্য বিজ্ঞপ্তি ব্যবহৃত হয়। অপেক্ষা করার জন্য, আপনাকে কিছু অবজেক্টের প্রয়োজন, এটিতে সিঙ্ক্রোনাইজ করুন এবং তারপরে এটিতে অপেক্ষা করুন। অবহিত করার জন্য, আপনাকে একই থ্রেডে সিঙ্ক্রোনাইজ করার জন্য অন্যান্য থ্রেডের প্রয়োজন , এবং কল নোটিফিকেশন ।
পিটার btibraný

6

waitএবং sleepপদ্ধতিগুলি খুব আলাদা:

  • sleep "জাগ্রত" করার কোনও উপায় নেই,
  • যেখানে waitঅপেক্ষার সময়কালে "জাগ্রত হওয়ার" উপায় রয়েছে অন্য থ্রেড কলিং দ্বারা notifyবা notifyAll

এটি নিয়ে ভাবতে আসুন, নামগুলি সেই বিষয়ে বিভ্রান্ত করছে; তবে sleepএকটি প্রমিত নাম এবং waitভালো হয় WaitForSingleObjectবা WaitForMultipleObjectsউইন API এ।


3
কিন্তু আমরা কি ঘুমাতে বাধা দিতে পারি না? সুতরাং যে ঘুম / বাধা বনাম অপেক্ষা / অবহিত সঙ্গে পার্থক্য কি?
পেসারিয়ার

2
আপনি ঘুমন্ত ব্যক্তিকে বাধা দিতে পারেন, তবে আপনি কেবল অপেক্ষারত ব্যক্তিকে অবহিত করতে পারেন। থ্রেড একই।
ঋষি

5

এই পোস্টটি থেকে: http://javaconcepoftheday.com/differences-between-wait-and-sleep-methods-in-java/

অপেক্ষা () পদ্ধতি।

1) যে থ্রেডটি অপেক্ষা করে () পদ্ধতিটি এটি ধারণ করে এটি লকটি প্রকাশ করে।

2) অন্য থ্রেডগুলি একই লকটিতে বিজ্ঞপ্তি () বা বিজ্ঞপ্তি (সমস্ত) পদ্ধতি কল করার পরে থ্রেডটি লকটি ফিরে পায় ain

3) অপেক্ষা () পদ্ধতিটি সিঙ্ক্রোনাইজড ব্লকের মধ্যে অবশ্যই কল করা উচিত।

4) অপেক্ষা () পদ্ধতি সর্বদা অবজেক্টগুলিতে ডাকা হয়।

5) অপেক্ষার থ্রেডগুলিকে নোটিফাই () বা নোটিফাইএল () পদ্ধতিগুলিতে কল করে অন্য থ্রেডগুলি জাগিয়ে তুলতে পারে।

6) অপেক্ষা () পদ্ধতিটি কল করতে, থ্রেডে অবশ্যই অবজেক্ট লক থাকা উচিত।

ঘুম () পদ্ধতি

1) থ্রেড যা ঘুমকে () পদ্ধতিতে কল করে এটি লকটি ধরে রাখে না।

2) স্লিপ () পদ্ধতিটি সিঙ্ক্রোনাইজড ব্লকের মধ্যে বা তার বাইরে বলা যেতে পারে।

3) ঘুম () পদ্ধতিটি সর্বদা থ্রেডে ডাকা হয়।

4) ঘুমানোর থ্রেডগুলি অন্য থ্রেড দ্বারা জাগানো যায় না। যদি এটি করা হয়, থ্রেড বিঘ্নিত ধারণাটি নিক্ষেপ করবে।

5) স্লিপ () পদ্ধতিতে কল করতে থ্রেডে অবজেক্ট লক থাকা দরকার না।


4
  1. wait()Objectক্লাসের একটি পদ্ধতি । ক্লাসের
    sleep()একটি পদ্ধতি Thread

  2. sleep()থ্রেডটি sleepএক্স মিলিসেকেন্ডের জন্য অবস্থায় যেতে দেয় ।
    যখন একটি থ্রেড ঘুমের রাজ্যে যায় it doesn’t release the lock

  3. wait()থ্রেডটি লকটি প্রকাশ করতে দেয় এবং goes to suspended state
    এই থ্রেডটি সক্রিয় থাকবে যখন কোনও notify()বা notifAll()পদ্ধতিটিকে একই অবজেক্টের জন্য ডাকা হয়।


4

ঘুম / বাধা এবং অপেক্ষা / অবহিতের মধ্যে একটি সম্ভাব্য বড় পার্থক্য

যখন প্রয়োজন হয় না তখন একটি ব্যতিক্রম তৈরি করা অযোগ্য। যদি আপনার উচ্চতর হারে একে অপরের সাথে যোগাযোগের থ্রেড থাকে, তবে আপনি যদি সমস্ত সময় বাধা দিতে থাকেন, তবে এটি সিপিইউয়ের মোট অপচয় নয় waste


+1, বাস্তবায়নের একটি বৈধ পয়েন্ট যদিও বাস্তবায়নের অভ্যন্তরীণ বিষয়ে তর্ক করা পারফরম্যান্স বিশ্লেষণের সাথে আরও প্রাসঙ্গিক হতে পারে ...
পেসারিয়ার

অন্য কথায় ব্যতিক্রমগুলি তৈরি করার ওভারহেড সিস্টেমের একটি বনাম অন্যটির প্রয়োগের ওভারহেডের তুলনায় উল্লেখযোগ্যভাবে ছোট হতে পারে।
পেসারিয়ার

3

আপনি সঠিক - ঘুম () সেই থ্রেডটিকে "ঘুম" এনে দেয় এবং সিপিইউ চলে যাবে এবং অন্যান্য থ্রেডগুলি প্রক্রিয়াকরণ করবে (অন্যথায় কনটেক্সট স্যুইচিং হিসাবে পরিচিত) ভেরাস আমার বিশ্বাস ওয়েট বর্তমান থ্রেডকে প্রসেসিং করে রাখে।

আমাদের উভয়ই আছে কারণ যদিও আপনি এটি ব্যবহার করছেন না এমন সময় অন্য লোকেরা সিপিইউ ব্যবহার করতে দেওয়া বুদ্ধিমান বলে মনে হতে পারে, তবে প্রকৃতপক্ষে প্রসঙ্গের স্যুইচিংয়ের একটি ওভারহেড রয়েছে - ঘুম কতক্ষণের জন্য নির্ভর করে, এটি সিপিইউ চক্রগুলিতে আরও ব্যয়বহুল হতে পারে থ্রেডগুলি স্যুইচ করার চেয়ে এটি আপনার থ্রেডটি কেবলমাত্র কয়েক এমএসের জন্য কিছুই না করে।

আরও মনে রাখবেন যে ঘুম একটি প্রসঙ্গের স্যুইচকে বাধ্য করে।

এছাড়াও - সাধারণভাবে কনটেক্সট স্যুইচিং নিয়ন্ত্রণ করা সম্ভব নয় - অপেক্ষার সময় ওএস ওএস পারে (এবং আরও অপেক্ষা করবে) অন্য থ্রেড প্রক্রিয়া করতে পছন্দ করে।


4
অপেক্ষা করুন () বর্তমান থ্রেড প্রসেসিং সিপিইউ রাখে না। এটি ঘুমের মতো যা এটি প্রসঙ্গের স্যুইচও ঘটায়: javamex.com / টিউটোরিয়ালস / থ্রেডস / কনটেক্সট_সুইচ.এসটিএমএল । আমি স্ট্যাকওভারফ্লোকে ঘিরে অর্ধেক বছর ধরে জিজ্ঞাসা করেছি এবং দেখে মনে হচ্ছে যে অপেক্ষা / নোটিশে বনাম ঘুম / বাধাগুলির মধ্যে পার্থক্য কী তা কেউ জানে না।
পেসারিয়ার

যদিও ঘুম বর্তমান থ্রেড প্রক্রিয়াকরণে সিপিইউ রাখে না, আমি মনে করি, এটি সিপিইউর জন্য কিছুটা হলেও বোঝা, কারণ সিপিইউ কখন ঘুম শেষ করবে তার মুহূর্তটি ট্র্যাক করা দরকার। এটি অপেক্ষা হিসাবে "বিজ্ঞপ্তি" মত বাহ্যিক ট্রিগার নেই। কোন?
ভ্লাদিমির নবোকভ

@ ভ্লাদিমিরনাবোকভ, বাহ্যিক ট্রিগারটি হ'ল interrupt। বিভক্তি সময় nমধ্যে wait(n)। Now এখন 8 বছর কেটে গেছে এবং এখনও কারও উত্তর নেই!
পেসারিয়ার

3

পদ্ধতিগুলি বিভিন্ন জিনিসের জন্য ব্যবহৃত হয়।

Thread.sleep(5000);   // Wait until the time has passed.

Object.wait();        // Wait until some other thread tells me to wake up.

থ্রেড.স্লিপ (এন) বাধা দেওয়া যেতে পারে তবে অবজেক্ট.ওয়েট () অবশ্যই অবহিত করা উচিত । অপেক্ষা করার সর্বাধিক সময় উল্লেখ করা সম্ভব: Object.wait(5000)সুতরাং এটি ব্যবহার করা সম্ভব হবে wait, sleepতবে আপনাকে লক দিয়ে বিরক্ত করতে হবে।

ঘুমানোর / অপেক্ষার সময় কোনও পদ্ধতিই সিপিইউ ব্যবহার করে না।

পদ্ধতিগুলি একই জাতীয়ভাবে নয়, একই জাতীয় নির্মাণ ব্যবহার করে স্থানীয় কোড ব্যবহার করে প্রয়োগ করা হয়।

নিজের জন্য অনুসন্ধান করুন: স্থানীয় পদ্ধতিগুলির উত্স কোডটি কি উপলব্ধ? ফাইলটি /src/share/vm/prims/jvm.cppশুরুর পয়েন্ট ...


থ্রেড.স্লিপ টাইমিংও অনির্দিষ্টকালের জন্য সেট করা যেতে পারে। অবজেক্ট.ওয়েটের সময় নির্ধারণও সেট করা যেতে পারে। এই উত্তরটি ব্যাখ্যা করে না যে কেন আমাদের 2 টি হাতুড়ি একই কাজ করে।
প্যাসেরিয়র

Thread.sleep(big_num) বাধা দিতে হবে। অবহিত করা Object.wait(small_num) যেতে পারে।
পেসারিয়ার

3

এটি অন্য থ্রেড দ্বারা অবহিত না হওয়া পর্যন্ত এখানে অপেক্ষা () অপেক্ষার স্থানে থাকবে তবে যেখানে ঘুম () এর কিছুটা সময় থাকবে ... তারপরে এটি স্বয়ংক্রিয়ভাবে প্রস্তুত অবস্থায় চলে যাবে ...


3

অপেক্ষা করুন () এবং ঘুম () পার্থক্য?

থ্রেড.স্লিপ () এর কাজ শেষ হয়ে গেলে এটি কেবল তখন সবার কাছেই লকটি ছেড়ে দেয়। যতক্ষণ না এটি কারও কাছে লকটি প্রকাশ না করে।

  Sleep() take the key, its never release the key to anyone, when its work completed then only its release then only take the key waiting stage threads.

অবজেক্ট.ওয়েট () এটি যখন অপেক্ষা করার পর্যায়ে যাবে তখন এটি কীটি প্রকাশ করবে এবং প্যারামিটারের উপর ভিত্তি করে কিছু সেকেন্ডের জন্য অপেক্ষা করবে।

উদাহরণ স্বরূপ:

আপনি কফিটি আপনার ডান হাতে নিচ্ছেন, আপনি একই হাতের অন্য যে কোনও ব্যক্তিকে নিতে পারেন, যখন আপনার নীচে নামানো হবে তখন কেবল অন্য কোনও জিনিসটি এখানে একই ধরণের নিতে হবে। এছাড়াও। এটি ঘুম () আপনি ঘুমানোর সময় আপনি কোনও কাজ করেন নি, আপনি কেবল ঘুমাইচ্ছেন .. এখানেও একই।

অপেক্ষা করুন ()। আপনি অপেক্ষা করা যখন আপনি নিচে রাখা হয় এবং অন্য একটি অর্থ গ্রহণ, এটি অপেক্ষা

আপনি প্লে বা আপনার সিস্টেমে কিছু প্লেয়ার হিসাবে প্লেয়ার হিসাবে একই সাথে আপনি একসাথে একাধিক খেলতে পারবেন না, এটি এখানে ঠাট্টা করা হয়, আপনি যখন অন্য কারও সিনেমা বা গান বেছে বেছে বেছে অপেক্ষা করেন তখন অপেক্ষা করুন


3

waitলক প্রকাশ করে এবং sleepনা। অপেক্ষার স্থানে একটি থ্রেড যত তাড়াতাড়ি ডাকা হবে notifyবা notifyAllডাকা হবে। তবে sleepথ্রেডের ক্ষেত্রে লকটি রাখা থাকে এবং ঘুমের সময়টি শেষ হয়ে গেলে এটি কেবলমাত্র যোগ্য হয়ে উঠবে।


সুতরাং যদি থ্রেডটি 10 ​​সেকেন্ডের জন্য ঘুমিয়ে থাকে এবং একটি বাধা ব্যতিক্রম ঘটে ????
গীক 23

জাভাদকে InterruptedExceptionযেমন বলা হয়েছে ঠিক তেমনই গীক আনকে ফেলে দেওয়া হয়েছে
ব্যবহারকারী 207421

@ এজেপি: আপনি কি একই ইজেপি, যিনি সান.জভা.কম.কম ফোরামে ছিলেন? কমপক্ষে আপনার স্কোর একই পরামর্শ দেয় :-)
গীক

2

sleep()পদ্ধতিটি বর্তমান থ্রেডকে একটি নির্দিষ্ট সময়ের জন্য চলমান অবস্থা থেকে ব্লক রাজ্যে স্থানান্তরিত করে। যদি বর্তমান থ্রেডে কোনও অবজেক্টের লক থাকে তবে তা ধরে রাখে, যার অর্থ অন্য থ্রেডগুলি class শ্রেণীর অবজেক্টে কোনও সিঙ্ক্রোনাইজড পদ্ধতি কার্যকর করতে পারে না।

wait() পদ্ধতিটি বর্তমান থ্রেডকে নির্দিষ্ট সময়ের জন্য বা অবহিত না হওয়া পর্যন্ত ব্লক অবস্থায় চলে যায়, তবে এই ক্ষেত্রে থ্রেডটি অবজেক্টের লক প্রকাশ করে (যার অর্থ অন্যান্য থ্রেড কলিং অবজেক্টের যে কোনও সিঙ্ক্রোনাইজড পদ্ধতি কার্যকর করতে পারে।


2

আমার মতে, উভয় প্রক্রিয়ার মধ্যে প্রধান পার্থক্য হ'ল ঘুম / বাধা থ্রেড পরিচালনা করার সর্বাধিক প্রাথমিক উপায়, যেখানে অপেক্ষা / বিজ্ঞপ্তিটি থ্রেড আন্তঃযোগাযোগকে আরও সহজ করার উদ্দেশ্যে একটি বিমূর্ততা। এর অর্থ হ'ল ঘুম / বাধাদান কিছু করতে পারে তবে এই নির্দিষ্ট কাজটি করা আরও কঠিন।

অপেক্ষা / বিজ্ঞপ্তি আরও উপযুক্ত কেন? এখানে কিছু ব্যক্তিগত বিবেচনা দেওয়া হল:

  1. এটি কেন্দ্রীয়করণ কার্যকর করে। এটি একক ভাগ করা অবজেক্টের সাথে থ্রেডের একটি গ্রুপের মধ্যে যোগাযোগের সমন্বয় করতে দেয়। এটি কাজটি অনেক সহজ করে তোলে।

  2. এটি সিঙ্ক্রোনাইজেশন কার্যকর করে। কারণ এটি প্রোগ্রামারটি একটি সংক্রোহিত ব্লকে অপেক্ষা / অবহিত করার জন্য কলটি মোড়ানো করে।

  3. এটি থ্রেডের উত্স এবং সংখ্যা থেকে পৃথক। এই পদ্ধতির সাহায্যে আপনি অন্যান্য থ্রেডগুলি সম্পাদনা না করে বা বিদ্যমানগুলির একটি ট্র্যাক না রেখে ইচ্ছামত আরও থ্রেড যুক্ত করতে পারেন। আপনি যদি ঘুম / ব্যাঘাত ব্যবহার করেন তবে প্রথমে আপনার ঘুমের থ্রেডগুলির রেফারেন্সগুলি রাখা দরকার এবং তারপরে একে একে হাতে করে বাধা দিন।

বাস্তব জীবনের একটি উদাহরণ যা এটি ব্যাখ্যা করা ভাল এটি একটি সর্বোত্তম রেস্তোঁরা এবং সেই পদ্ধতি যা কর্মীরা তাদের মধ্যে যোগাযোগ করার জন্য ব্যবহার করে: ওয়েটাররা গ্রাহকের অনুরোধটিকে কেন্দ্রীয় জায়গায় ছেড়ে দেয় (কর্ক বোর্ড, একটি টেবিল ইত্যাদি), একটি ঘণ্টা বাজান, এবং রান্নাঘর থেকে শ্রমিকরা অনুরোধ নিতে আসে। যে কোনও কোর্স প্রস্তুত হওয়ার পরে, রান্নাঘরের কর্মীরা আবার ঘণ্টা বাজান যাতে ওয়েটাররা সচেতন হয় এবং তাদের গ্রাহকদের কাছে নিয়ে যায়।


2

ঘুম সম্পর্কে উদাহরণ লক প্রকাশ করে না এবং অপেক্ষা করে না

এখানে দুটি শ্রেণি রয়েছে:

  1. প্রধান : প্রধান পদ্ধতি এবং দুটি থ্রেড রয়েছে।
  2. সিঙ্গলটন : এটি দুটি স্ট্যাটিক পদ্ধতির getInstance () এবং getInstance (বুলিয়ান isWait) সহ একক ক্লাস।

    public class Main {
    
    private static Singleton singletonA = null;
    private static Singleton singletonB = null;
    
    public static void main(String[] args) throws InterruptedException {
    
    Thread threadA = new Thread() {
        @Override
        public void run() {
    
            singletonA = Singleton.getInstance(true);
    
        }
    };
    
    Thread threadB = new Thread() {
        @Override
        public void run() {
            singletonB = Singleton.getInstance();
    
            while (singletonA == null) {
                System.out.println("SingletonA still null");
            }
    
            if (singletonA == singletonB) {
                System.out.println("Both singleton are same");
            } else {
                System.out.println("Both singleton are not same");
            }
    
        }
    };
    
    threadA.start();
    threadB.start();
    
     }
    }

এবং

public class Singleton {

    private static Singleton _instance;

    public static Singleton getInstance() {

    if (_instance == null) {
        synchronized (Singleton.class) {
            if (_instance == null)
                _instance = new Singleton();
        }
    }
    return _instance;

}

public static Singleton getInstance(boolean isWait) {

    if (_instance == null) {
        synchronized (Singleton.class) {
            if (_instance == null) {
                if (isWait) {
                    try {
                        // Singleton.class.wait(500);//Using wait
                        Thread.sleep(500);// Using Sleep
                        System.out.println("_instance :"
                                + String.valueOf(_instance));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                _instance = new Singleton();
            }
        }
    }
    return _instance;

 }
}

এখন এই উদাহরণটি চালান আপনি নীচে আউটপুট পাবেন:

_instance :null
Both singleton are same

থ্রেডএ এবং থ্রেডবি দ্বারা নির্মিত সিঙ্গলটন দৃষ্টান্তগুলি একই। এর অর্থ থ্রেডবি তার লকটি মুক্ত হওয়ার আগ পর্যন্ত অপেক্ষা করছে।

থ্রেড.স্লিপ (500) মন্তব্য করে এখন সিঙ্গলটন.জাভা পরিবর্তন করুন; পদ্ধতি এবং অবিস্মরণীয় Singleton.class.wait (500); । এখানে সিঙ্গলটন.ক্লাস.ওয়েটের কারণে (500); মেথড থ্রেডএ সমস্ত অধিগ্রহণের তালা ছেড়ে দেবে এবং "নন রান্নেবল" অবস্থায় চলে যাবে, থ্রেডবি সিঙ্ক্রোনাইজড ব্লকে প্রবেশের জন্য পরিবর্তন পাবে।

এখন আবার চালান:

SingletonA still null
SingletonA still null
SingletonA still null
_instance :com.omt.sleepwait.Singleton@10c042ab
SingletonA still null
SingletonA still null
SingletonA still null
Both singleton are not same

থ্রেডএ এবং থ্রেডবি দ্বারা নির্মিত সিঙ্গলটন দৃষ্টান্তগুলি একই নয় কারণ থ্রেডবি সিঙ্ক্রোনাইজড ব্লকে প্রবেশ করতে পরিবর্তন পেয়েছে এবং 500 মিলিসেকেন্ডের থ্রেডএ এর শেষ অবস্থান থেকে শুরু হয়ে গেছে এবং আরও একটি সিঙ্গলটন অবজেক্ট তৈরি করেছে।


2

সিঙ্ক্রোনাইজ ব্লক থেকে বলে অভিহিত হই wait() পদ্ধতি সবসময় সিঙ্ক্রোনাইজ ব্লক IE থেকে বলা হয় wait()বস্তুর উপর এটা বলা হয় সামনে লক বস্তু মনিটরের পদ্ধতি চাহিদা। তবে sleep()পদ্ধতিটিকে বাইরের সিঙ্ক্রোনাইজড ব্লক থেকে ডেকে আনা যেতে পারে অর্থাৎ sleep()পদ্ধতিতে কোনও অবজেক্ট মনিটরের প্রয়োজন হয় না।

অবৈধমনিস্টার স্টেট এক্সেপশন: রানটাইমের সময় ছোঁড়ার wait()চেয়ে অবজেক্ট লক অর্জন না করে যদি পদ্ধতিটি কল করা হয় IllegalMonitorStateExceptionতবে sleep()পদ্ধতি কখনও এ জাতীয় ব্যতিক্রম ছুঁড়ে না ফেলে।

কোন শ্রেণীর wait() অন্তর্গত : পদ্ধতি java.lang.Objectশ্রেণীর sleep()অন্তর্গত তবে পদ্ধতি java.lang.Threadশ্রেণীর অন্তর্গত ।

অবজেক্ট বা থ্রেডে কল করা হয়: wait() পদ্ধতিতে বস্তুগুলিতে কল করা হয় তবে sleep()পদ্ধতিটিকে থ্রেডস অব অবজেক্টস নয় called

থ্রেডের স্থিতি: যখন wait()পদ্ধতিটি অবজেক্টে ডাকা হয়, থ্রেড যা হোল্ড অবজেক্টের মনিটরটি চলমান থেকে অপেক্ষার স্থানে চলে যায় এবং কেবল তখনই notify()বা চালিতযোগ্য অবস্থায় ফিরে আসতে পারে যখন notifyAll()সেই বস্তুর উপর বা পদ্ধতিটি কল করা হয়। এবং পরবর্তীতে থ্রেড শিডিয়ুলার শিডিয়ুল করে যে থ্রেডটি রান্নেবল থেকে চলমান অবস্থায় যেতে হবে। যখন sleep()থ্রেডে ডাকা হয় এটি চলমান থেকে অপেক্ষার স্থানে চলে যায় এবং যখন ঘুমের সময় শেষ হয় তখন চলমান অবস্থায় ফিরে আসতে পারে।

যখন সিঙ্ক্রোনাইজড ব্লক থেকে ডাকা হয়: যখন wait()পদ্ধতিটি থ্রেড বলা হয় তখন অবজেক্টের লকটি ছেড়ে যায়। কিন্তু sleep()পদ্ধতিটি যখন সিঙ্ক্রোনাইজড ব্লক বা পদ্ধতির থ্রেড থেকে কল করা হয় তখন অবজেক্ট লক থাকে না।

আরও রেফারেন্সের জন্য


এর চেয়ে সম্ভবত আরও ভাল রেফারেন্স ইউআরএল।
ড্রিউ

2

এর অপেক্ষা () পদ্ধতিতে ওরাকল ডকুমেন্টেশন পৃষ্ঠা থেকে Object:

public final void wait()
  1. অন্য থ্রেডটি এই অবজেক্টটির জন্য notify()পদ্ধতি বা পদ্ধতির ডাক না দেওয়া পর্যন্ত বর্তমান থ্রেডটি অপেক্ষা করতে দেয় notifyAll()। অন্য কথায়, এই পদ্ধতিটি ঠিক এমনভাবে আচরণ করে যেন এটি কলটি সম্পাদন করে wait(0)
  2. বর্তমান থ্রেডে অবশ্যই এই বস্তুর মনিটরের মালিক হতে হবে। থ্রেডটি এই মনিটরের মালিকানা প্রকাশ করে এবং অন্য থ্রেডটি অবজেক্ট হওয়ার জন্য এই অবজেক্টের মনিটরের জন্য অপেক্ষা করা থ্রেডকে অবহিত না করা পর্যন্ত অপেক্ষা করে
  3. বাধা এবং উদ্দীপনা জাগানো সম্ভব
  4. এই পদ্ধতিটি কেবল এমন কোনও থ্রেড দ্বারা কল করা উচিত যা এই বস্তুর মনিটরের মালিক

এই পদ্ধতিটি ছুড়ে ফেলে

  1. IllegalMonitorStateException - যদি বর্তমান থ্রেডটি অবজেক্টের মনিটরের মালিক না হয়।

  2. InterruptedException- যদি কোনও থ্রেড বর্তমান থ্রেডের বাধাগ্রস্ত হয় বা যখন বর্তমান থ্রেডটি কোনও বিজ্ঞপ্তির জন্য অপেক্ষা করছিল। এই ব্যতিক্রমটি ছুঁড়ে ফেলা হলে বর্তমান থ্রেডের বাধার স্থিতি সাফ হয়ে যায়।

ক্লাসের ঘুম () পদ্ধতিতে ওরাকল ডকুমেন্টেশন পৃষ্ঠা থেকে Thread:

public static void sleep(long millis)
  1. সিস্টেম টাইমার এবং সময়সূচীর যথার্থতা এবং নির্ভুলতার অধীনে সুনির্দিষ্ট সংখ্যক মিলি সেকেন্ডের জন্য বর্তমানে নির্বাহ করা থ্রেডকে ঘুমের জন্য (অস্থায়ীভাবে কার্যকর করা বন্ধ করুন) কার্যকর করে।
  2. থ্রেডটি কোনও মনিটরের মালিকানা হারাবে না।

এই পদ্ধতিটি ছুড়ে ফেলে:

  1. IllegalArgumentException - যদি মিলিসের মান negativeণাত্মক হয়

  2. InterruptedException- যদি কোনও থ্রেড বর্তমান থ্রেডে বাধা সৃষ্টি করে। এই ব্যতিক্রমটি ছুঁড়ে ফেলা হলে বর্তমান থ্রেডের বাধার স্থিতি সাফ হয়ে যায়।

অন্যান্য মূল পার্থক্য:

wait()স্থিতিশীল পদ্ধতি sleep()(শ্রেণি পদ্ধতি) এর বিপরীতে একটি অ স্থির পদ্ধতি (উদাহরণ পদ্ধতি)।


1

wait()একটি সিঙ্ক্রোনাইজড পদ্ধতির sleep()অভ্যন্তরে দেওয়া হয় যেখানে একটি অ-সিঙ্ক্রোনাইজড পদ্ধতির অভ্যন্তরে দেওয়া হয় কারণ wait()পদ্ধতিটি বস্তুটিতে লক প্রকাশ করে তবে sleep()বা yield()মুক্তি দেয় lock()


sleep()কোনও synchronizedব্লক বা পদ্ধতির ভিতরে থাকতে পারে । উত্তর কিছুই ব্যাখ্যা করে।
ব্যবহারকারী 207421

1
  • পদ্ধতিটি wait(1000)বর্তমান থ্রেডকে এক সেকেন্ড পর্যন্ত ঘুমায় ।
    • কোনও থ্রেডটি যদি notify()বাnotifyAll() পদ্ধতি কলটি গ্রহণ করে তবে 1 সেকেন্ডেরও কম ঘুমাতে পারে ।
  • কল করার sleep(1000)ফলে বর্তমান থ্রেডটি ঠিক 1 সেকেন্ডের জন্য ঘুমায় ।
    • এছাড়াও ঘুমানোর থ্রেড কোনও সংস্থান লক করে না । কিন্তু অপেক্ষা থ্রেড না।

1
sleep(1000)ঠিক 1 সেকেন্ডের জন্য ঘুমানোর গ্যারান্টি নেই। এর আগে বাধাগ্রস্ত হতে পারে।
লুসিও

1
এই পোস্টগুলি তাই বিভ্রান্তিকর। এই থ্রেডের অন্য সমস্ত পোস্ট বলে যে একটি ঘুমন্ত থ্রেডটি লকটি ধরেছে এবং অপেক্ষার থ্রেডটি লকটি ধরে না। একইভাবে ডায়াগ্রামের সাথে পোস্টটি বোঝায় যে ঘুমন্ত থ্রেড জাগ্রত করার জন্য কল করা হয়েছে তবে অন্যান্য পোস্টগুলি (এবং থ্রেডের স্টেট ডায়াগ্রামগুলি) বোঝায় যে কেবল বাধা () বা টাইম আউট পিরিয়ড এগুলি করছে this আমি কেবল অনুশীলনে জাভা কনসুরেন্সির একটি অনুলিপি অর্ডার করেছি, এমন কিছু যা আমার অনেক আগে পড়া উচিত ছিল!
বেরিম্বোলো

1

প্রকৃতপক্ষে, জাভা ডক্সগুলিতে এই সমস্ত পরিষ্কারভাবে বর্ণিত হয়েছে (তবে আমি উত্তরগুলি পড়ার পরেই এটি উপলব্ধি করেছি)।

http://docs.oracle.com/javase/8/docs/api/index.html :

অপেক্ষা () - বর্তমান থ্রেডে অবশ্যই এই বস্তুর মনিটরের মালিক হতে হবে। থ্রেডটি এই মনিটরের মালিকানা প্রকাশ করে এবং অন্য থ্রেডটি বিজ্ঞপ্তি পদ্ধতিতে বা notifyAll পদ্ধতিতে কল করার মাধ্যমে এই অবজেক্টের মনিটরের জন্য অপেক্ষা করা থ্রেডকে অবহিত না করা পর্যন্ত অপেক্ষা করে। থ্রেডটি তারপরে অপেক্ষা করে যতক্ষণ না এটি মনিটরের মালিকানা পুনরায় অর্জন করতে পারে এবং কার্যকর করা পুনরায় শুরু করে।

ঘুম () - সিস্টেম টাইমার এবং সময়সূচীর যথাযথতা এবং নির্ভুলতার অধীনে সুনির্দিষ্ট সংখ্যক মিলিসেকেন্ডের জন্য বর্তমানে নির্বাহিত থ্রেডকে ঘুমের জন্য (অস্থায়ীভাবে কার্যকর করা বন্ধ করুন) কারণ দেয়। থ্রেডটি কোনও মনিটরের মালিকানা হারাবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.