সতর্কতা : এই প্রোগ্রামগুলি হ'ল ক্লোন বোমা (কাঁটা বোমার এক ধরণের কম বিপজ্জনক তবে এখনও বিপজ্জনক রূপ); যেমন, স্যান্ডবক্সিং বা সংস্থান সীমা ছাড়াই এগুলি কোনও উত্পাদন সিস্টেমে চালাবেন না । ক্লোন বোমা একটি লুপে থ্রেড তৈরি করে (কাঁটা বোমার বিপরীতে, যা একটি লুপে প্রক্রিয়া তৈরি করে), সুতরাং আপনি এগুলি কেবল প্রশ্নে প্রক্রিয়াটি হত্যা করে তাদের থামিয়ে দিতে পারেন (কাঁটাচামচ বোমাগুলির তুলনায় এগুলি খুব কম বিপজ্জনক করে তোলে, যা খুব কঠিন হতে পারে) সুস্পষ্ট করা); তবে আপনি সম্ভবত এটি পরিচালনা না করা পর্যন্ত (বা প্রোগ্রামটি নিজেরাই প্রাকৃতিকভাবে জয়ী হওয়া এবং প্রস্থান না হওয়া অবধি) সম্ভবত আপনার বেশিরভাগ সিপিইউ বেঁধে দেবে। আপনার ওএসকে এই প্রোগ্রামগুলির যে পরিমাণ মেমরি এবং সিপিইউ ব্যবহার করার অনুমতি দেওয়া হয়েছে তার পরিমাণের সীমাবদ্ধতা রাখতে অনুরোধ করা উচিত যাতে এটি পরীক্ষা করার জন্য একটি নিরাপদ পরিবেশ তৈরি করা উচিত।
Thread x=Thread.currentThread();new Thread(x::stop).start();
এটি অনলাইন চেষ্টা করুন!
catch (Exception …)
প্রশ্নে উভয় দৃষ্টান্তে পরিবর্তন করা দরকার catch (Throwable …)
। এটি তত্ত্বগতভাবে আরও সুরক্ষিত হওয়া উচিত , কম নয়, তবে এটি এই সমাধানটিকে সম্ভব হতে সক্ষম করে।
আমি ল্যাম্বদার পরিবর্তে কোনও পদ্ধতি রেফারেন্স ব্যবহার করে এই উত্তরের প্রথম সংস্করণে 5 বাইট সংরক্ষণ করেছি।
জাভা 4, 104 বাইট (অরক্ষিত, মূল মোড়কের সাথে কাজ করা উচিত)
final Thread x=Thread.currentThread();new Thread(){public void run(){x.stop(new Exception());}}.start();
এটি অনলাইন চেষ্টা করুন! (লিঙ্কটি একটি জাভা 8 বাস্তবায়নে যায়, এভাবে কাজ করবে না)
জাভা এর আধুনিক সংস্করণগুলি থেকে মুছে ফেলা বৈশিষ্ট্যগুলি ব্যবহার করে, ধাঁধাটির এমন সংস্করণও সমাধান করা সম্ভব যা একটি প্রয়োজন Exception
। সম্ভবত, কমপক্ষে। (জাভা 4 এখনই খুব পুরানো এবং আমি মনে করতে পারি না যে এটি কোন বৈশিষ্ট্যগুলি করেছে এবং এতে কী ছিল না seen হিসাবে দেখা যেতে পারে, জাভাতে এর আগে অনেক কম বৈশিষ্ট্য ছিল এবং এটি তাই আরও ভার্ভোজ ছিল; আমাদের ছিল না ল্যাম্বডাস, তাই আমাকে একটি অভ্যন্তর শ্রেণি তৈরি করতে হয়েছিল))
ব্যাখ্যা
এই প্রশ্নের বেশিরভাগ সমাধান হ'ল সি # তে (একসাথে জাভা সলিউশন সহ যা কোড ইনজেকশনের ফর্ম হিসাবে ভারসাম্যহীন বন্ধনী ব্যবহার করে এবং একটি পার্ল সমাধান যা জাভাতেও নয়) দিয়ে প্রতারণা করে। সুতরাং আমি ভেবেছিলাম জাভাতেও এই ধাঁধাটি কীভাবে "যথাযথভাবে" সমাধান করা যায় তা দেখানোর চেষ্টা করা ভাল হবে।
উভয় প্রোগ্রাম কার্যকরভাবে অভিন্ন (সুতরাং প্রথম প্রোগ্রামটি যে কাজ করে তা আমাকে উচ্চ আত্মবিশ্বাস দেয় যে দ্বিতীয় প্রোগ্রামটিও কাজ করবে, যদি না আমি দুর্ঘটনাক্রমে জাভা -4 বৈশিষ্ট্যটি ব্যবহার করি না; Thread#stop
জাভা 5-তে অবমূল্যায়ন করা হয়েছিল)।
জাভা Thread#stop
পদ্ধতিটি পর্দার আড়ালে কাজ করে প্রশ্নবিদ্ধ থ্রেডে নিক্ষিপ্ত হতে পারে। উদ্দেশ্যটির জন্য নিক্ষিপ্ত উদ্দেশ্যটি হ'ল ThreadDeath
(একটি Error
, বিশেষত কারণ মানুষ প্রায়শই কম্বল ধরার ব্যতিক্রম চেষ্টা করে এবং জাভার ডিজাইনাররা এটি ঘটতে চাইছিল না), যদিও এটি আপনাকে কিছু ফেলে দিতে দেয় (বা অভ্যস্ত; এপিআই হওয়ার পরে কিছু সময়ে) নকশাকৃত, জাভার ডিজাইনাররা বুঝতে পেরেছিলেন যে এটি একটি অবিশ্বাস্যভাবে খারাপ ধারণা এবং পদ্ধতিটির যে সংস্করণটি আর্গুমেন্টকে পুরোপুরি গ্রহণ করে) তা মুছে ফেলে। অবশ্যই, যে সংস্করণটি ছুড়ে ফেলেছে ThreadDeath
তা মোটামুটি ঝুঁকিপূর্ণ অপারেশন যা সম্পর্কে আপনি কয়েকটি গ্যারান্টি দিতে পারেন (উদাহরণস্বরূপ, এটি আপনাকে এই ধাঁধাটি সমাধান করার অনুমতি দেয়, এমন কিছু যা "সম্ভব নয়"), সুতরাং আপনার ধারণা করা উচিত নয় এটি ব্যবহার করুন, তবে জাভা 8 হিসাবে এটি এখনও কাজ করে।
এই প্রোগ্রামটি একটি নতুন থ্রেড তৈরি করে এবং জোর করে কোনও ব্যতিক্রমটিকে মূল থ্রেডে ফেলে দিতে বলার মাধ্যমে কাজ করে। আমরা যদি ভাগ্যবান হয়ে থাকি তবে এটি একটি সময়ে এটি করতে পারে যখন আমরা অভ্যন্তরীণ catch
ব্লকের বাইরে থাকি ( catch
প্রোগ্রামটি শেষ না হওয়া পর্যন্ত আমরা বাইরের ব্লকটি এড়াতে পারি না , কারণ এর চারপাশে একটি লুপ থাকে)। যেহেতু আমাদের কাছে ইতিমধ্যে ইতিমধ্যে লুপটি যুক্ত হয়েছে, কেবলমাত্র সেই লুপটি আমাদের থ্রেডগুলি তৈরি করে রাখতে সহায়তা করে বাইট-সেভিং, এই প্রত্যাশায় যে এর মধ্যে একটি সঠিকভাবে সঠিক সময়টিকে আঘাত করবে। এটি সাধারণত কয়েক সেকেন্ডের মধ্যেই ঘটে বলে মনে হয়।
(টিআইও দ্রষ্টব্য: টিআইওর বর্তমান সংস্করণটি এই প্রোগ্রামটি কার্যকর করার আগে খুব শীঘ্রই হত্যা করতে আগ্রহী, সম্ভবত সমস্ত থ্রেড তৈরি হওয়ার কারণে এটি টিআইওতে কাজ করতে পারে তবে নির্ভরযোগ্যভাবে কাজ করে না, তাই প্রায়শই কয়েকটি প্রচেষ্টা প্রয়োজন হয় "আপনি জিতেছেন!" আউটপুট পান)