আমি জাভাতে কীভাবে বিলম্ব করব?


344

আমি জাভাতে কিছু করার চেষ্টা করছি এবং কিছুক্ষণের জন্য লুপের জন্য কয়েক সেকেন্ডের জন্য অপেক্ষা / বিলম্ব করার জন্য আমার কিছু দরকার।

while (true) {
    if (i == 3) {
        i = 0;
    }

    ceva[i].setSelected(true);

    // I need to wait here

    ceva[i].setSelected(false);

    // I need to wait here

    i++;
}

আমি একটি পদক্ষেপ সিকোয়েন্সার তৈরি করতে চাই এবং আমি জাভাতে নতুন। কোন পরামর্শ?


19
ব্যবহার Thread.Sleep()
ক্ষুদ্র


2
অপেক্ষার উদ্দেশ্য কী? আপনি কি একটি নির্দিষ্ট ঘটনাটি হওয়ার জন্য অপেক্ষা করছেন? ঘুম () পদ্ধতিটি কী করে তা আপনি নিশ্চিত
হয়েছেন

@ ক্ষুদ্র, এটি নিরাপদ নয়।
ইউশা আলেয়াউব

12
এটা আসলে Thread.sleep(<milisecondsToSleep>)sমূলধন হওয়া উচিত নয়।
বেনিয়ামিন

উত্তর:


678

যদি আপনি বিরতি দিতে চান তবে ব্যবহার করুন java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

এক সেকেন্ডের জন্য ঘুমাতে বা

TimeUnit.MINUTES.sleep(1);

এক মিনিট ঘুমোতে।

যেহেতু এটি একটি লুপ, এটি একটি অন্তর্নিহিত সমস্যা উপস্থাপন করে - প্রবাহিত। প্রতিবার আপনি কোড চালান এবং তারপরে ঘুমানো আপনি দৌড় থেকে খানিকটা সরে যাবেন, বলুন, প্রতি সেকেন্ডে। এটি যদি কোনও সমস্যা হয় তবে ব্যবহার করবেন না sleep

এছাড়াও, sleepএটি নিয়ন্ত্রণের ক্ষেত্রে খুব নমনীয় নয়।

প্রতি সেকেন্ডে কাজ চালানোর জন্য বা এক সেকেন্ড দেরিতে আমি জোরালোভাবে একটি ScheduledExecutorServiceএবং উভয়ই scheduleAtFixedRateবা সুপারিশ করব scheduleWithFixedDelay

উদাহরণস্বরূপ, myTaskপ্রতি সেকেন্ডে পদ্ধতিটি চালানোর জন্য (জাভা 8):

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

এবং জাভা 7:

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            myTask();
        }
    }, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

1
@ ম্যাথহে ময়েসেন আমি এই জাভা 8 চালানোর উদাহরণটি পাই না। অ্যাপটি আসলে কী? মাই টাস্ক () কে একটি চলমান ল্যাম্বডায় পরিবর্তন করে এটি কাজ করে: চলমান মাই টাস্ক = () -> {...};
Comfytoday

2
এটি একটি পদ্ধতির রেফারেন্স @ কমফিটোডে - আমি ডকুমেন্টেশন দিয়ে শুরু করার পরামর্শ দিই ।
বোরিস স্পাইডার

TimeUnit.SECONDS.wait(1)নিক্ষেপ করা হয় IllegalMonitorStateExceptionউইন্ডোজ 6.3 উপর জাভা 8.1 বিল্ড 31 হবে। পরিবর্তে, আমি Thread.sleep(1000)চেষ্টা / ধরা ছাড়াই ব্যবহার করতে সক্ষম ।
জন মেয়ার

1
জাভা 8-এ java.util.concurrent.TimeUnit মধ্যে আপনি পেতে Unhandled exception: java.lang.InterruptedExecutionজন্যsleep(1)
Shai alôn

1
আপনি ঘিরা আবশ্যক TimeUnit.SECONDS.sleep(1);সঙ্গেtry catch
Shai alôn

148

ব্যবহার Thread.sleep(1000);

1000 প্রোগ্রামটি বিরতি দেবে এমন মিলিসেকেন্ডের সংখ্যা।

try
{
    Thread.sleep(1000);
}
catch(InterruptedException ex)
{
    Thread.currentThread().interrupt();
}

5
বিঘ্নিত এক্সসেপশন লগ করতে ভুলবেন না বা আপনি কখনই জানতে পারবেন না যে এই থ্রেডটি বাধা পেয়েছে।
m0skit0

12
আমি থ্রেড.কন্ট্রেনথ্রেড ()। বাধা (); এখানে আছে।
ব্রেন্ট 212

1
দেখুন: "কেন আমাদের আবার থ্রেড বাধা দিতে হবে?" এখানে: javasp विशेषज्ञists.eu/archive/Issue056.html
ত্রিস্তান


5

এটা ব্যবহার কর:

public static void wait(int ms){
        try
        {
            Thread.sleep(ms);
        }
        catch(InterruptedException ex)
        {
            Thread.currentThread().interrupt();
        }
    }

তারপরে আপনি এই পদ্ধতিটি যে কোনও জায়গায় কল করতে পারেন:

        wait(1000);

3

এটি করার জন্য গ্রহণযোগ্য উপায় ব্যবহার করা TimeUnit.SECONDS.sleep(1);বা Thread.sleep(1000);তা গ্রহণযোগ্য। উভয় ক্ষেত্রেই আপনাকে ধরতে হবে InterruptedExceptionযা আপনার কোডকে বুল্কি করে here সেখানে একটি ওপেন সোর্স জাভা গ্রন্থাগার রয়েছে যার নাম MgntUtils (আমার দ্বারা লিখিত) যা ইউটিলিটি সরবরাহ করে যা ইতিমধ্যে InterruptedExceptionঅভ্যন্তরের সাথে সম্পর্কিত। সুতরাং আপনার কোডটি কেবল একটি লাইন অন্তর্ভুক্ত করবে:

TimeUtils.sleepFor(1, TimeUnit.SECONDS);

জাভাডোকটি এখানে দেখুন । আপনি মাভেন সেন্ট্রাল বা গিথুব থেকে লাইব্রেরি অ্যাক্সেস করতে পারেন । পাঠাগারটি সম্পর্কে ব্যাখ্যা করা নিবন্ধটি এখানে পাওয়া যাবে


2
ব্যবহার catch (InterruptedException e) { /* empty */ }হয় না কোন যুক্তিসম্মত সমাধান এখানে। খুব কমপক্ষে, আপনার কিছু লগ সম্পর্কিত তথ্য সরবরাহ করা উচিত। বিষয় সম্পর্কে আরও তথ্যের জন্য javasp
विशेषज्ञ

3

ব্যবহার Thread.sleep(100);। সময়ের এককটি মিলি সেকেন্ড

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

public class SleepMessages {
    public static void main(String args[])
        throws InterruptedException {
        String importantInfo[] = {
            "Mares eat oats",
            "Does eat oats",
            "Little lambs eat ivy",
            "A kid will eat ivy too"
        };

        for (int i = 0;
             i < importantInfo.length;
             i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}

1

আমি জানি এটি একটি পুরানো পোস্ট তবে এটি কারও সাহায্য করতে পারে: আপনি একটি পদ্ধতি তৈরি করতে পারেন, তাই যখনই আপনাকে বিরতি দেওয়ার দরকার হয় আপনি টাইপ করতে পারেন pause(1000)বা অন্য কোনও মিলিসেকেন্ড মান:

public static void pause(int ms) {
    try {
        Thread.sleep(ms);
    } catch (InterruptedException e) {
        System.err.format("IOException: %s%n", e);
    }
}

এটি public static void main(String[] args)ক্লাসের ঠিক উপরে , উপরে above োকানো হয়। তারপরে, পদ্ধতিটি কল করতে, টাইপ করুন pause(ms)তবে msবিরতিতে মিলিসেকেন্ডের সংখ্যাটি দিয়ে প্রতিস্থাপন করুন । এইভাবে, আপনি যখনই বিরতি দিতে চান তখন পুরো চেষ্টা-ধরার বিবৃতি sertোকাতে হবে না।

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