प्रौद्योगिकी साझेदारी

मुख्यसूत्रः समाप्तः भवति, बालसूत्रः पुनः निष्पादयति

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

समस्या पृष्ठभूमिः १.

कारणं यत् वितरितानि तालानि कुर्वन् अहं यूनिट् टेस्ट् मध्ये १० थ्रेड् निर्माय ततः तान् आरब्धवान् । प्रत्येकं थ्रेड् run मेथड् मध्ये सामग्रीं मुद्रयिष्यति, परन्तु परीक्षणपरिणामाः वस्तुतः किमपि न निर्गच्छन्ति । अहं बहु भ्रमितः अभवम्, ततः अहं अनुमानं कृतवान् यत् मुख्यसूत्रः उपसूत्रस्य निष्पादनं समाप्तवान् स्यात् तथा च प्रत्यक्षतया समाप्तः अभवत् निश्चितम्, thread.join() इति योजयित्वा अपेक्षितं परिणामः प्राप्तः ।

समस्यानिष्कर्षः : १.

मुख्यविधौ लिखिता चेत् एषा समस्या नास्ति, परन्तु एकपरीक्षणे एषा समस्या विद्यते ।

समस्याप्रक्रिया : १.

मूलसङ्केतः : १.

  1. @Test
  2. public void multipleThreadTest(){
  3. System.out.println(Thread.currentThread().getName());
  4. LockThread[] lockThreads = new LockThread[10];
  5. for (int i=0;i< lockThreads.length;i++){
  6. lockThreads[i] = new LockThread(new ZkNodeNoneBlockingLock("app"));
  7. }
  8. for (LockThread lockThread : lockThreads) {
  9. lockThread.start();
  10. }
  11. }
  12. private static class LockThread extends Thread{
  13. ZkNodeNoneBlockingLock locker;
  14. public LockThread(ZkNodeNoneBlockingLock locker){
  15. this.locker = locker;
  16. }
  17. @Override
  18. public void run() {
  19. boolean lock = locker.lock();
  20. System.out.println(this.getName() + (lock ? "上锁成功" : "上锁失败"));
  21. }
  22. }

परिवर्तितः कोडः : १.

  1. @Test
  2. public void multipleThreadTest(){
  3. System.out.println(Thread.currentThread().getName());
  4. LockThread[] lockThreads = new LockThread[10];
  5. for (int i=0;i< lockThreads.length;i++){
  6. lockThreads[i] = new LockThread(new ZkNodeNoneBlockingLock("app"));
  7. }
  8. for (LockThread lockThread : lockThreads) {
  9. lockThread.start();
  10. }
  11. for (LockThread lockThread : lockThreads){
  12. try {
  13. lockThread.join();
  14. } catch (InterruptedException e) {
  15. throw new RuntimeException(e);
  16. }
  17. }
  18. }
  19. private static class LockThread extends Thread{
  20. ZkNodeNoneBlockingLock locker;
  21. public LockThread(ZkNodeNoneBlockingLock locker){
  22. this.locker = locker;
  23. }
  24. @Override
  25. public void run() {
  26. boolean lock = locker.lock();
  27. System.out.println(this.getName() + (lock ? "上锁成功" : "上锁失败"));
  28. }
  29. }

टीका:

Thread.join() वर्तमानसूत्रम् अस्ति, अर्थात् मुख्यसूत्रं यावत् सूत्रसूत्रस्य निष्पादनं न समाप्तं तावत् निष्पादनं निरन्तरं कर्तुं न शक्नोति ।