নিম্নলিখিত কোড স্নিপেট দুটি থ্রেড চালায়, একটি হ'ল প্রতিটি টাইমারে সরল টাইমার লগিং, দ্বিতীয়টি একটি অসীম লুপ যা বাকী অপারেশন চালায়:
public class TestBlockingThread {
private static final Logger LOGGER = LoggerFactory.getLogger(TestBlockingThread.class);
public static final void main(String[] args) throws InterruptedException {
Runnable task = () -> {
int i = 0;
while (true) {
i++;
if (i != 0) {
boolean b = 1 % i == 0;
}
}
};
new Thread(new LogTimer()).start();
Thread.sleep(2000);
new Thread(task).start();
}
public static class LogTimer implements Runnable {
@Override
public void run() {
while (true) {
long start = System.currentTimeMillis();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// do nothing
}
LOGGER.info("timeElapsed={}", System.currentTimeMillis() - start);
}
}
}
}
এটি নিম্নলিখিত ফলাফল দেয়:
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1004
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1003
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=13331
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1006
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1003
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1004
[Thread-0] INFO c.m.c.concurrent.TestBlockingThread - timeElapsed=1004
13.3 সেকেন্ডের জন্য কেন অসীম টাস্ক অন্য সমস্ত থ্রেড ব্লক করে দেয় তা আমি বুঝতে পারি না। আমি থ্রেডের অগ্রাধিকার এবং অন্যান্য সেটিংস পরিবর্তন করার চেষ্টা করেছি, কিছুই কার্যকর হয়নি।
এটি ঠিক করার জন্য আপনার কাছে যদি কোনও পরামর্শ থাকে (ওএস প্রসঙ্গের স্যুইচিং সেটিংস সহ টুইঙ্কিং) দয়া করে আমাকে জানান।
-Djava.compiler=NONE
তা হবে না।
-XX:+PrintCompilation
বর্ধিত দেরি শেষ হওয়ার সাথে সাথে আমি দৌড়ে