2016-12-26 3 views
1

Ich habe Code mit Thread verwenden, aber ich benutze nicht Thread von java.util.concurrent, also möchte ich meinen Code ändern, aber ich habe ein Problem. ?Thread von java.util.concurrent

Thread thread = new Thread() { 
        public void run() { 
         doSomething(); 
        } 
       }; 

I Testamentsvollstrecker verwenden wie dieses Thema wollen, so wie ich das tun kann, ist ähnlich wie dies in java.util.concurrent zu tun, habe ich versucht:

ExecutorService executorService = Executors.newCachedThreadPool(); 
Runnable runnable = new Runnable() { 
        public void run() { 
         //my code doing something 
        } 
       }; 

Auch ich habe:

List<Runnable> threadsList = new ArrayList<Runnable>(); 

und ich habe Methode:

boolean isAllowedCreateNewThread(Runnable taskToRun){ 
for(int i = 0; i < threadsList.size(); i++){ 
     Runnable th = threadsList.get(i); 
     if(th.isAlive())doSomething(); //isAlive doesn't work since I have runnable instead of Thread 
boolean isAllowed = true ;//I have here some bool function but it doesn't matter 
    if(isAllowed){ 
     threadsList.add(taskToRun); 
     //service.submit(taskToRun); 
     executorService.execute(taskToRun); 
    } 
return isAllowed; 
} 

Wenn ich List<Thread> threadsList = new ArrayList<Thread>(); habe und ExecutorService nicht benutze und überall ändere Runnable zu Thread es Arbeit. Also ich denke das muss ich auch ändern, aber wie? Was ist Keyword-insted Thread? Ausführbar? Oder etwas anderes? Auch ich habe:

for(int i = 0; i < threadsList.size(); i++){ 
     Thread th = threadsList.get(i); 
     if(th.isAlive())doSomething(); myThreadName.start(); 

Ich habe ähnliche Ich möchte diesen Code So allgemein in java.util.concurrent und myThreadName.start();isAlive() zu etwas ändern ändern Thread-Klasse unter Verwendung von java.util.concurrent

+0

Ich habe Ihre Frage dreimal gelesen, aber nicht verstanden, was Sie fragen. Was willst du eigentlich erreichen? – lexicore

+0

Ändern Sie meinen Code mit Thread-Methoden zu Methoden von java.util.concurrent – grapexs

+0

Also was hast du bereits versucht und welche Probleme sind aufgetreten. "Schreibe meinen Code für mich neu" ist keine gute Frage. – lexicore

Antwort

1

Sie mit Threads codieren kann Ihren Code durch das unterste Code-Segment ersetzen.

  1. Erstellen Sie eine ausführbare Klasse.

    class MyRunable implements Runnable{ 
        public void run() { 
         doSomething(); 
        } 
        private void doSomething() { 
         System.out.println("Thread Executing is " + Thread.currentThread().getId()); 
        } 
    } 
    
  2. Erstellen Sie einen Executor-Dienst mit der erforderlichen Anzahl von Threads. Dies erstellt einen Pool der erforderlichen Anzahl von Threads.

    int numberOfThreads = 4; // number of threads you want to create 
    ExecutorService service = Executors.newFixedThreadPool(numberOfThreads); 
    
  3. Ihre Runnable im Pool für jeden Thread vorhanden erstellen und zuweisen, um sie Ihren Testamentsvollstrecker.

    for(int i=0;i<numberOfThreads;i++){ 
        Runnable myRunable = new MyRunable(); 
        service.submit(myRunable); 
    } 
    
    service.shutdown(); // this is a must as not given ,it halts the termination of the program 
    

    Beispielausgabe

    Thread Executing is 9 
    Thread Executing is 10 
    Thread Executing is 8 
    Thread Executing is 11 
    

So wird der gesamte Code wie folgt aussehen:

class MyRunable implements Runnable { 
    public void run() { 
     doSomething(); 
    } 

    private void doSomething() { 
     System.out.println("Thread Executing is " + Thread.currentThread().getId()); 
    } 

    public static void main(String[] args) { 
     int numberOfThreads = 4; // number of threads you want to create 
     ExecutorService service = Executors.newFixedThreadPool(numberOfThreads); 

     for(int i=0;i<numberOfThreads;i++){ 
      Runnable myRunable = new MyRunable(); 
      service.submit(myRunable); 
     } 

     service.shutdown(); 

    } 

} 
1

Sie Testamentsvollstrecker von java.util.concurren t verwenden können.
Executors sind entworfen, Threads zu erstellen und zu verwalten, so dass Sie das nicht direkt tun müssen.

In Ihrem Beispiel wäre es:

ExecutorService executorService = Executors.newCachedThreadPool(); 
executorService.execute(() -> doSomething()); 


Es gibt viele Arten von Testamentsvollstrecker, und Sie müssen entscheiden, welche den Kontext des Aufrufs verwenden erwägen.
Zum Beispiel, wenn Sie nur ein Thread haben möchten, können Sie:

Executors.newSingleThreadExecutor(); 

feste Anzahl von Threads 10, dh:

Executors.newFixedThreadPool(10); 

oder neue Themen erstellen, wie benötigt:

Executors.newCachedThreadPool(); 


Weitere Informationen zu Executors finden Sie unter here.
Hoffe es hilft.

Verwandte Themen