Is there anyway one kernel thread can switch between compute intensive tasks?

David Holmes david.holmes at oracle.com
Fri Jan 26 02:32:22 UTC 2018


On 25/01/2018 7:51 PM, kant kodali wrote:
> I am trying to see if there anyway a single thread in Java can switch
> between tasks where each task is an infinite loop ?

Right now no. Java threads map 1-to-1 to kernel threads.

The kind of switching you're asking about is precisely what Fibers would 
be able to provide.

David
-----

> I have the following code and I am wondering if there is any possible way I
> could make the count for all three jobs below change while they run on
> single thread? perhaps using wait/notify/interrupt (whatever it takes)?
> 
> 
> import java.util.concurrent.ExecutorService;import
> java.util.concurrent.Executors;
> class Job implements Runnable {
>      protected int count;
>      public Job(){
>          this.count = 0;
>      }
> 
>      public void run() {
>          System.out.println(Thread.currentThread().getName());
>          while(true) {
>             this.count = this.count + 1;
>             System.out.print("");
>          }
>      }}
> 
> public class ThreadTest {
> 
>      static int tasks = 3;
>      static Job[] jobs = new Job[3];
> 
>      public static void main(String[] args) {
>          ExecutorService executor = Executors.newFixedThreadPool(1);
>          for (int i = 0; i < tasks; i++) {
>              jobs[i] = new Job();
>              executor.execute(jobs[i]);
>          }
> 
>          while (!executor.isTerminated()) {
>             for (int i = 0; i < tasks; i++) {
>                System.out.print(jobs[i].c + " ");
>             }
>             System.out.println();
>             try { Thread.sleep(1000); } catch (InterruptedException ex) { }
>          }
>          System.out.println("end");
>      }}
> 
> 
> If you actually run the program the count will only change for one job but
> not for all three jobs. But if I use green threads in Golang and assign
> each green thread an infinite loop they are able to switch however what I
> don't understand is that once a green thread assigns a kernel thread to run
> one infinite loop how come other green threads were able to schedule on the
> same kernel thread? can someone enlighten me here? Sorry if my question is
> naive.
> 
> Thanks much!
> 


More information about the loom-dev mailing list