Test wielu wątków

0

Chciałbym przeprowadzić test wielu wątków niestety coś robie nie tak poniewaz wszystko uruchamia mi sie w wątku main. Zerknijcie na to. Poniżej wrzucam kod i wynik.

 
public class Testowanie {

static Runnable syst = () -> {
        for (int i = 0; i < 3; i++)

        {
            System.out.println("Watek 1" + " " + Thread.currentThread().getName());

        }
    };

    static Runnable syst1 = () -> {
        for (int i = 0; i < 3; i++)

        {

            System.out.println("Watek 2" + " " + Thread.currentThread().getName());
        }
    };

 public static void main(String[] args) {

 for (int i = 0; i < 2 ; i++) {
            syst.run();
            syst1.run();
        }
}

}



W konsoli dostaje:

 
Watek 1 main
Watek 1 main
Watek 1 main
Watek 2 main
Watek 2 main
Watek 2 main
Watek 1 main
Watek 1 main
Watek 1 main
Watek 2 main
Watek 2 main
Watek 2 main
0

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class MainTest
{
public static void main(String[] args)
{
Runnable w1 = new Runnable()
{
@Override
public void run()
{
Thread.currentThread().setName("Watek 1");
System.out.println("Hello from " + Thread.currentThread().getName());
}
};

	Runnable w2 = new Runnable() 
	{
		@Override
		public void run() 
		{
			Thread.currentThread().setName("Watek 2");
			System.out.println("Hello from " + Thread.currentThread().getName());
		}
	};
	
	
	ExecutorService executor = Executors.newCachedThreadPool();
	executor.submit(w1);
	executor.submit(w2);
	
	
	executor.shutdown();
	try 
	{
		executor.awaitTermination(1, TimeUnit.MINUTES);
	} catch (InterruptedException e) 
	{
		// ...
	}
	
	System.out.println("Hello from " + Thread.currentThread().getName());
	
}

}

1

Wątki to klasa Thread i do obiektu takiej klasy podaje się Runnable przez konstruktor a startuje się metodą start. Ty zwyczajnie wołasz sekwencyjnie metody i wątkami nie ma to nic wspólnego.

Albo lepiej niż gole wątki używać jakiegoś executora czy completablefuture, ale zakładam że to na studia a nie do faktycznego używania.

0

Pewnie tego się spodziewasz:

import java.util.*;
import java.lang.*;
import java.io.*;

public class Testowanie
  {
   static Runnable syst1 = () ->
     {
     	Thread.currentThread().setName("A");
      for(int i=0;i<3;++i) System.out.println("Watek 1 "+Thread.currentThread().getName());
     }; 
   static Runnable syst2 = () -> 
     {
	     Thread.currentThread().setName("B");
	     for(int i=0;i<3;++i) System.out.println("Watek 2 "+Thread.currentThread().getName());
     };
 
   public static void main(String[] args) 
     {
      for (int i=0;i<2;++i)
        {
         syst1.run();
         syst2.run();
        }
     }
  }

ale i tak przeczytaj co napisał @Shalom bo raczej nie o to ci chodzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1