ভূমিকা
‘রকস্টার’ – আমার কাছে বাংলাদেশের সফটওয়্যার ইন্ডাস্ট্রিতে আ ন ম বজলুর রহমান রোকন হচ্ছে রকস্টার। নিজের ছাত্র হিসেবে বলছি না, এখন পর্যন্ত তার ক্ষুদ্র প্রফেশনাল ক্যারিয়ারের দিকে তাকিয়ে, সবাই আমার সঙ্গে একমত হবেন নিশ্চিত। বিশ্ববিদ্যালয়ের প্রথম বর্ষের প্রথম দিনগুলো থেকেই দেখছি, রোকন কখনোই একসঙ্গে সবকিছু করতে চায়নি। বরং প্রথাগত ভালো ছাত্র হওয়ার দিকে নজর না দিয়ে, তার যেটা ভালো লেগেছে সেটা সবচেয়ে ভালোভাবে করার চেষ্টা করেছে। ক্লাসরুমে সবসময়ই বলি, তুমি যদি ঝাড়ুদারও হতে চাও তবে দেশের শ্রেষ্ঠ ঝাড়ুদার হয়ে দেখাও। রোকন হচ্ছে আমার এই কথাটির শ্রেষ্ঠ উদাহরণ। সে সফটওয়্যার শিল্পের একজন শিল্পী হতে চেয়েছে এবং দেশের অন্যতম শ্রেষ্ঠ শিল্পী হয়েই দেখিয়েছে।
যে কোনো স্টারের কাছে সবাই শিখতে চায়, তার মতো হতে চায়, সবাই তাকে অনুসরণ করতে চায়। যার ফলশ্রুতিতে স্টার-এর ওপর বর্তায় অনেক দায়িত্ব। সব রোল মডেল সেই দায়িত্ব সঠিকভাবে পালন করতে পারে না। কখনো কখনো অতিরিক্ত দায়িত্বভারে ভেঙ্গে পড়ে। রোকন কিন্তু তার দায়িত্ব থেকে সরে যায়নি, দায়িত্বকে অবহেলায় ভুলেও থাকেনি। বরং তার চওড়া কাঁধে সমস্ত দায় নিয়ে, বাংলা ভাষাতেই জাভার মতো প্রোগ্রামিং ল্যাংগুয়েজ চর্চা এবং শেখানোর মহান ব্রতে রত হয়েছে।
কেউ বলতে পারে, টেকনোলজির মত বিষয় আবার বাংলা ভাষাতে বোঝানো কেন? এতে বিষয়ের মূলসুর কেটে যাওয়ার সম্ভাবনা তৈরি হয়। শিক্ষক হিসেবেই বলছি, ক্লাসরুমে যখন ইংরেজিতে লেকচার দেই, বইয়ের বিষয়াবলী সত্যিই মেকানিকাল রোবটের মতো সহজে বলে দেয়া যায়। কিন্তু তাতে কি নিজে যা বলতে চাইলাম তা কি ঠিকঠাকমতো বলা হলো? ছাত্রছাত্রীরাই কি তাদের মনের আশ মেটাতে পারল? বরং ছাত্রছাত্রীরা যখন সত্যিই আরও বুঝতে চায়, আরও গহীণে ঢুকতে চায়, তখন কিন্তু উদাহরণ হিসেবে ঠাকুরমার ঝুলিতে-ও আশ্রয় খুঁজি। পাশের বাড়ির রহিমের সমস্যা এবং ভিনগাঁয়ের করিমের সমাধান দিয়েই গল্প সাজাই। তবে কেন সেই কথাগুলো টেকনোলজির বইয়ে আসতে পারে না?
রোকনের প্রথম প্রচেষ্টা “জাভা প্রোগ্রামিং” বইটির সঙ্গেও আমি যুক্ত ছিলাম। ওর প্রথম বইটির মোড়ক উন্মোচন আমিই করেছি। সেদিনই রোকনের কাছে শুনি, জাভার অ্যাডভান্সড বিষয়াবলী নিয়েও বাংলায় বই লেখার আকাঙ্ক্ষার কথা। তার আরও বড় স্বপ্নটার কথা। কিন্তু সে যে এত দ্রুত, এত জটিল একটি বিষয় অর্থাৎ “থ্রেডিং” নিয়ে এত সহজ ও সাবলীলভাবে লিখে ফেলবে, আমি তা ভাবিনি। এই ছোট্ট সহজ ভূমিকা লিখতে গিয়েই বুঝতে পারছি কি অসাধারণ কিন্তু অমানুষিক পরিশ্রম রোকন-কে করতে হয়েছে।
যারা আগেই থ্রেড নিয়ে কাজ করেছেন, যারা অপারেটিং সিস্টেম সম্পর্কে ভালো জ্ঞান রাখেন, তারা বইটি পড়ামাত্রই বুঝতে পারবেন, কতখানি জ্ঞানের গভীরতা থাকলে, এতখানি সাবলীলভাবে এরকম একটি বই লেখা যায়। যারা নতুন, থ্রেড সত্যিই বুঝতে চাচ্ছেন, আমি বলব তারা সৌভাগ্যবান, যে এমন একটি বই মাতৃভাষাতেই পাচ্ছেন। সবসময় নব্য বা হবু প্রোগ্রামারদের বলে এসেছি- খুব ভাল প্রোগ্রামার হতে চাইলে- অপারেটিং সিস্টেম, অথবা আরও সোজাসাপ্টা মেমোরি ম্যানেজমেন্ট সম্পর্কে খুব স্বচ্ছ ধারণা থাকতে হবে। রোকন মোমোরির কাছাকাছি থেকে থ্রেড বোঝানোর চেষ্টা করেছে। খুব সহজ হতো যদি রোকন সরাসরি বলতো, থ্রেড ব্যবহার করতে চাও- এই এই কমান্ডগুলো মুখস্থ করে নাও। রোকন তা করেনি। সে সম্ভবত নিজের কাছেও সৎ থাকতে চেয়েছে। প্রতিটি বিষয়কে প্রথমে সিস্টেমের কাছে নিয়ে গিয়ে বুঝিয়েছে, তারপর উদাহরণ বা ইমপ্লিমেন্টেশনে ঢুকেছে। পাঠকের জন্য যা বিশাল প্রাপ্তি। বাংলা ভাষায় একটি জটিল টেকনিক্যাল বিষয়ের গভীরে পৌঁছে সহজেই পাঠকের সাথে যোগাযোগ (কমিউনিকেট) করা যায় – এটা রোকন করে দেখিয়েছে।
আমি এই বইয়ের সার্বিক সাফল্য কামনা করছি।
ডঃ কাজী মুহাইমিন-আস-সাকিব
অধ্যাপক,
তথ্য প্রযুক্তি ইনস্টিটিউট,
ঢাকা বিশ্ববিদ্যালয়
সূচীপত্র
লেখকের কথা
লেখক পরিচিতি
অধ্যায় ১ : থ্রেডিং কী
- ১.১ – থ্রেডিং কী
- ১.২ – থ্রেডিংয়ের সুবিধা
- ১.৩ – জাভা থ্রেড (Java Thread)
- ১.৪ – জাভা মেইন থ্রেড (Java Main Thread)
অধ্যায় ২ : থ্রেড তৈরি ও ব্যবহার
- ২.১ – থ্রেডের এক্সেপশন হ্যান্ডেলিং (Exception handling from thread)
- ২.২ – থ্রেড বন্ধ করা (Terminating a Thread)
- ২.৩ – volatile কিওয়ার্ডের ব্যবহার
- ২.৪ – থ্রেডের জীবনচক্র (Life Cycle of a Thread)
- ২.৫ – jstack and JConsole 51
- ২.৬ – থ্রেড স্লিপিং এবং রিজিউমিং (Thread sleeping and resuming)
- ২.৭ – থ্রেড সমাপ্তির জন্য অপেক্ষা (Waiting for finalization of a thread )
অধ্যায় ৩ : থ্রেড সেফটি ও ডেটা সিনক্রোনাইজেশন
- ৩.১ – থ্রেডের এক্সেপশন হ্যান্ডেলিং (Exception handling from thread)
- ৩.২ – থ্রেড লোকাল (ThreadLocal)
- ৩.৩ – একাধিক থ্রেডের মধ্যে মেমোরি শেয়ার করা (Memory sharing across
multiple threads) - ৩.৪ – থ্রেড সেফটি (Thread safety)
- ৩.৫ – ইমিউটেবল অবজেক্ট (Immutable Object)
- ৩.৬ – রেস কন্ডিশন এবং ক্রিটিক্যাল সেকশন (Race condition and Critical section)
- ৩.৭ – লাইভনেস (Liveness)
- ৩.৮ – ডেডলক (Deadlock)
- ৩.৮ – ডাইনিং ফিলোসফারস সমস্যা (The Dining Philosophers Problem)
- ৩.৮ – wait(), notify() এবং notifyAll()
অধ্যায় ৪ : সিনক্রোনাইজড ও কনকারেন্ট কালেকশন
- ৪.১ – সিনক্রোনাইজড কালেকশন ও কনকারেন্ট কালেকশন
অধ্যায় ৫ : ব্লকিং কিউ ও প্রডিউসার-কনজিউমার প্যাটার্ন
অধ্যায় ৬ : এক্সিকিউটর ফ্রেমওয়ার্ক
- ৬.১ – এক্সিকিউটর ফ্রেমওয়ার্ক (Executor Framework)
- ৬.২ – থ্রেডপুল (Thread Pool)
- ৬.৩ – Callable এবং Future
অধ্যায় ৭ : লকস এবং ল্যাচেস (Locks and Latches)
- ৭.১ – লকস (Locks)
- ৭.২ – ল্যাচ (Latch)
অধ্যায় ৮ : কনকারেন্সি বনাম প্যারালালিজম
- ৮.১ – কনকারেন্সি বনাম প্যারালালিজম (Concurrency vs. Parallelism)
- ৮.২ – Fork/Join Basics
অধ্যায় ৯ : প্রজেক্ট
- ৯.১ – মাল্টিথ্রেডেড ফাইল ডাউনলোডার (Multi-Threaded File Downloader)
পরিশিষ্ট
- পরিশিষ্ট-১ : অ্যাটোমিক ভ্যারিয়েবলস
- পরিশিষ্ট-২ : ডিমন থ্রেড (DAEMON Thread)
- পরিশিষ্ট-৩ : একটি লাইভলকের উদাহরণ
- পরিশিষ্ট-৪ : অনেক বেশি থ্রেড অ্যাপ্লিকেশনকে ধীর করে
- পরিশিষ্ট-৫ : জাভা মেমোরি মডেল (Java Memory Model – JMM)
Reviews
There are no reviews yet.