প্রতি এক্স সেকেন্ডে "হ্যালো ওয়ার্ল্ড" মুদ্রণ করুন


127

ইদানীং প্রিন্ট আউট করার জন্য আমি প্রচুর সংখ্যক লুপগুলি ব্যবহার করছি Hello World:

int counter = 0;

while(true) {
    //loop for ~5 seconds
    for(int i = 0; i < 2147483647 ; i++) {
        //another loop because it's 2012 and PCs have gotten considerably faster :)
        for(int j = 0; j < 2147483647 ; j++){ ... }
    }
    System.out.println(counter + ". Hello World!");
    counter++;
}

আমি বুঝতে পারি এটি এটি করার একটি খুব নিরীহ উপায়, তবে আমি জাভাতে কোনও টাইমার লাইব্রেরি এখনও ব্যবহার করি নি। প্রতি সেকেন্ডে 3 সেকেন্ড মুদ্রণের জন্য একজন কীভাবে উপরের পরিবর্তন করতে পারে?


1
নীচের উত্তরগুলিতে অবশ্যই আপনার প্রশ্নের উত্তর দেওয়া উচিত, আপনার এটিও নোট করা উচিত আপনি যেভাবে এটি করছেন তা প্রতিটি মেশিনে একটি পৃথক ব্যবধানে আসতে পারে। এটি কত দ্রুত কম্পাইলার চালাতে পারে তার উপর নির্ভর করে।
IHazabone

উত্তর:


187

আপনি প্রতিটি সেকেন্ডে চালানোর জন্য আপনার কার্য নির্ধারণের জন্য যে ক্লাসগুলি ব্যবহার করতে পারেন সেগুলি Timerএবং TimerTaskক্লাসগুলিও একবার দেখে নিতে পারেন n

আপনার এমন একটি শ্রেণি দরকার যা পদ্ধতিটি প্রসারিত TimerTaskও ওভাররাইড করে public void run(), যা আপনি যখনই এই শ্রেণীর উদাহরণটি timer.schedule()পদ্ধতিতে পাস করেন তখনই কার্যকর করা হবে ..

এখানে একটি উদাহরণ দেওয়া হয়েছে, যা Hello Worldপ্রতি 5 সেকেন্ডে মুদ্রণ করে:

class SayHello extends TimerTask {
    public void run() {
       System.out.println("Hello World!"); 
    }
}

// And From your main() method or any other method
Timer timer = new Timer();
timer.schedule(new SayHello(), 0, 5000);

9
নোট করুন যে 2-প্যারাম scheduleপদ্ধতিটি নির্দিষ্ট বিলম্বের পরে একবার কার্যকর করা হবে। 3-পরম scheduleবা scheduleAtFixedRateব্যবহার করা দরকার।
টিম বেন্ডার

2
হা হা অবশ্যই. কখনও কখনও আমি উত্তরে ভোট পেয়েছি এবং আমি সন্ধান করতে চাই যে আমার নিজের বোঝাপড়ার উন্নতি হয়েছে যেহেতু আমি কোনও সমাধান দেওয়ার মাধ্যমে সর্বশেষ বিড়বিড় করেছিলাম।
টিম বেন্ডার

4
@ টিমবেন্ডার কেবল ভাবছেন যে ওপি সত্যিই এটি দিয়ে তার কাজটি সম্পন্ন করেছে কিনা;) যাইহোক, এখন আমি ExecutorServiceএই কাজের জন্য ব্যবহার করতে পছন্দ করব । এটি traditionalতিহ্যবাহী থ্রেড এপিআইর চেয়ে সত্যই একটি বড় উন্নতি। উত্তর দেওয়ার সময় এটি ব্যবহার করেন নি।
রোহিত জৈন

4
Timer timer = new Timer(true);trueএকটি ডিমন হিসাবে সেট করা উচিত । আপনি টাইমার না চাইলে অ্যাপ্লিকেশনটি বন্ধ করার পরেও চলছে।
টমাসজ মুলারস্কাইক

এটি আমাকে অবশেষে টাইমারগুলিও বুঝতে সাহায্য করেছে + + 1. ভাল কাজ চালিয়ে যান!
ড্যানিয়েল টর্ক

197

আপনি যদি পর্যায়ক্রমিক কোনও কাজ করতে চান তবে একটি ব্যবহার করুন ScheduledExecutorService। সুনির্দিষ্টভাবে শিডিউডএক্সেকিউটারসেবা.সেসুলেডএটফিক্সডরেট

কোড:

Runnable helloRunnable = new Runnable() {
    public void run() {
        System.out.println("Hello world");
    }
};

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(helloRunnable, 0, 3, TimeUnit.SECONDS);

10
আমি আশা করি অন্য কেউ কেউ এটিকেও সমর্থন করে। থ্রেড.স্লিপ () ওপিতে কোডটি সেরা ফিট করে তবে এটি চাকাটির পরিবর্তে অপেশাদার পুনরায় সজ্জিত হতে পারে। পেশাদার সফ্টওয়্যার ইঞ্জিনিয়াররা চেষ্টা করা এবং বিশ্বস্ত API যেমন টাইমারটাস্ক ব্যবহার করবেন। শিডিউডএকসিকিউটর সার্ভিস আরও ভাল, যদিও; অনুশীলনে ব্রায়ান গোয়েটস এট আলজের জাভা কনকুরન્સી দেখুন । পরের শ্রেণিটি প্রায় এক দশক ধরে রয়েছে — এটি দুঃখের বিষয় যে এই সমস্ত উত্তর এটি উপেক্ষা করে।
মাইকেল শ্যাপার

2
@ মিশেলশেপার, আপনাকে ধন্যবাদ, এই উত্তরটি TimerTaskবৈকল্পিকের চেয়ে শেষ পর্যন্ত পেরিয়ে গেছে বলে আমি আনন্দিত । মজার বিষয় হচ্ছে, আমি লক্ষ্য করেছি যে গৃহীত উত্তরগুলি আসলে সঠিক নয়: API দুটি এপিআইয়ের বয়স একপাশে রাখা ScheduledExecutorServiceসহজতর স্বজ্ঞাতভাবে ঘোষণামূলক। TimeUnitপ্যারামিটার হিসাবে ব্যবহার এটি কী ঘটছে তা আরও পরিষ্কার করে তোলে। চলে গেছে কোডের মতো দিনগুলি 5*60*1000 // 5 minutes
টিম বেন্ডার

2
@ টিমবেন্ডার আমি লক্ষ্য করেছি পিরিয়ড আর্গুমেন্টের জন্য আপনার কাছে একটি 3 রয়েছে। এটি সেকেন্ডে বা মিলিসেকেন্ডে রয়েছে কিনা তা খুঁজে পাচ্ছি না। আমি এটি প্রতি 500 মিলিসেকেন্ডে (আধ সেকেন্ড) চালাতে চাই।
জনমারলিনো

2
ওহহ আচ্ছা. চতুর্থ আর্গুমেন্ট আপনাকে সময় নির্দিষ্ট করতে দেয় যেমন টাইমউনিট M মিলিলিসেকেন্ডস।
জনমারলিনো

1
জাভা 8 -তে টেরি কার্টার + এর পরিবর্তে আপনি Runnable helloRunnable = () -> { /*code */ };এটি আরও সুন্দর যা করতে পারেন ;)
জোয়েল

39

এটি করার চেষ্টা করুন:

Timer t = new Timer();
t.schedule(new TimerTask() {
    @Override
    public void run() {
       System.out.println("Hello World");
    }
}, 0, 5000);

এই কোডটি প্রতি 5000 মিলিসেকেন্ড ( 5 সেকেন্ড) হ্যালো ওয়ার্ল্ডকে সান্ত্বনা দেওয়ার জন্য মুদ্রণ চালাবে । আরও তথ্যের জন্য https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html পড়ুন


16

আমি এটি একটি টাইমার দিয়ে খুঁজে বের করেছি, আশা করি এটি সাহায্য করবে। আমি একই প্যাকেজ থেকে java.util.Timerএবং TimerTaskথেকে একটি টাইমার ব্যবহার করেছি । নিচে দেখ:

TimerTask task = new TimerTask() {

    @Override
    public void run() {
        System.out.println("Hello World");
    }
};

Timer timer = new Timer();
timer.schedule(task, new Date(), 3000);

10

আপনি Thread.sleep(3000)লুপ জন্য ভিতরে ব্যবহার করতে পারেন ।

দ্রষ্টব্য: এর জন্য একটি try/catchব্লক লাগবে ।


6
public class HelloWorld extends TimerTask{

    public void run() {

        System.out.println("Hello World");
    }
}


public class PrintHelloWorld {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new HelloWorld(), 0, 5000);

        while (true) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                System.out.println("InterruptedException Exception" + e.getMessage());
            }
        }
    }
}

অসীম লুপটি তৈরি করা হয়েছে বিজ্ঞাপন শিডিউলার কাজটি কনফিগার করা হয়েছে।


4

সবচেয়ে সহজ উপায় হ'ল 3000 মিলিসেকেন্ড (3 সেকেন্ড) ঘুমানোর জন্য মূল থ্রেড সেট করা:

for(int i = 0; i< 10; i++) {
    try {
        //sending the actual Thread of execution to sleep X milliseconds
        Thread.sleep(3000);
    } catch(InterruptedException ie) {}
    System.out.println("Hello world!"):
}

এটি থ্রেডটি কমপক্ষে X মিলিসেকেন্ডে থামিয়ে দেবে। থ্রেডটি আরও বেশি সময় ঘুমিয়ে থাকতে পারে, তবে এটি জেভিএম to কেবলমাত্র গ্যারান্টিযুক্ত হ'ল থ্রেডটি কমপক্ষে সেই মিলিসেকেন্ডগুলিতে ঘুমাবে। Thread#sleepদস্তাবেজটি একবার দেখুন :

সিস্টেম টাইমার এবং সময়সূচীর যথার্থতা এবং নির্ভুলতার অধীনে সুনির্দিষ্ট সংখ্যক মিলি সেকেন্ডের জন্য বর্তমানে নির্বাহ করা থ্রেডকে ঘুমের জন্য (অস্থায়ীভাবে কার্যকর করা বন্ধ করুন) কার্যকর করে ।


ধন্যবাদ @ লুইগি। জাভা সর্বদা এটি 3000 এমএস নিশ্চিত করবে যে আমি কোন মেশিন (সিপিইউ) ডানদিকে চালাতে পারি না?
মেরিও

@ নন্দকুমারটেকলে আরও বিশদ দেওয়ার যত্ন?
মেরিও

4
@ মিরিও এটি থ্রেডটি কমপক্ষে এক্স মিলিসেকেন্ডে থামিয়ে দেবে। থ্রেডটি আরও বেশি সময় ঘুমিয়ে থাকতে পারে, তবে এটি জেভিএম to কেবলমাত্র গ্যারান্টিযুক্ত হ'ল থ্রেডটি কমপক্ষে সেই মিলিসেকেন্ডগুলিতে ঘুমাবে।
লুইগি মেন্ডোজা

4
ক্যাভেট: যদি এটি একটি আসল সময় ব্যবস্থা না হয় তবে ঘুম কমপক্ষে 3000 এমএস হবে তবে এটি আরও দীর্ঘ হতে পারে। যদি আপনি ঠিক 3000 এমএস ঘুম চান বিশেষত যেখানে মানুষের জীবন ঝুঁকির মধ্যে রয়েছে (চিকিত্সা সরঞ্জাম, নিয়ন্ত্রণকারী প্লেন ইত্যাদি) আপনার একটি রিয়েল টাইম অপারেটিং সিস্টেম ব্যবহার করা উচিত।
কিনজল দীক্ষিত

1
@ মিরিও: লুইগি এবং কিনজাল খুব সুন্দরভাবে ব্যাখ্যা করেছেন :)
নন্দকুমার টেকলে

3

ব্যবহার java.util.Timerএবং Timer#schedule(TimerTask,delay,period)পদ্ধতি আপনাকে সাহায্য করবে।

public class RemindTask extends TimerTask {
    public void run() {
      System.out.println(" Hello World!");
    }
    public static void main(String[] args){
       Timer timer = new Timer();
       timer.schedule(new RemindTask(), 3000,3000);
    }
  }

2

এটি জাভাতে থ্রেড ব্যবহার করার সহজ উপায়:

for(int i = 0; i< 10; i++) {
    try {
        //sending the actual Thread of execution to sleep X milliseconds
        Thread.sleep(3000);
    } catch(Exception e) {
        System.out.println("Exception : "+e.getMessage());
    }
    System.out.println("Hello world!");
}

1

সে কি বললো. আপনি নিজের পছন্দ মতো ব্যতিক্রমগুলি পরিচালনা করতে পারেন তবে থ্রেড.স্লিপ (মিলিসেকেন্ড); সবচেয়ে ভাল রুট হল।

public static void main(String[] args) throws InterruptedException {

1

থ্রেড কনস্ট্রাক্টরে রান্নেবল ইন্টারফেস ব্যবহার করার জন্য এখানে আরও একটি সহজ উপায়

public class Demo {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++){
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T1 : "+i);
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T2 : "+i);
                }
            }
        });

        Thread t3 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++){
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T3 : "+i);
                }
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}


-1

ছোট অ্যাপ্লিকেশনগুলির জন্য রোহিত উল্লিখিত হিসাবে টাইমার এবং টাইমার টাস্ক ব্যবহার করা ভাল তবে ওয়েব অ্যাপ্লিকেশনগুলিতে আমি কোয়ার্টজ শিডিয়ুলার ব্যবহার করব শিডিয়ুলারটি কাজের করতে এবং এই জাতীয় পর্যায়ক্রমিক কাজগুলি সম্পাদন ।

কোয়ার্টজ সময়সূচী জন্য টিউটোরিয়াল দেখুন ।


-1
public class TimeDelay{
  public static void main(String args[]) {
    try {
      while (true) {
        System.out.println(new String("Hello world"));
        Thread.sleep(3 * 1000); // every 3 seconds
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.