workqueue.java

来自「华为java接口反编译结果!其中包含其所有接口实现过程」· Java 代码 · 共 65 行

JAVA
65
字号
package com.kelefa.cmpp.work;

import java.util.LinkedList;

public class WorkQueue
{
  private final int nThreads;
  private final PoolWorker[] threads;
  private final LinkedList queue;

  public WorkQueue( int nThreads )
  {
    this.nThreads = nThreads;
    queue = new LinkedList();
    threads = new PoolWorker[ nThreads ];

    for ( int i = 0; i < nThreads; i++ ) {
      threads[ i ] = new PoolWorker();
      threads[ i ].start();
    }
  }

  public void execute( Runnable r )
  {
    synchronized ( queue ) {
      queue.addLast( r );
      queue.notifyAll();
    }
  }

  private class PoolWorker
      extends Thread
  {
    public void run()
    {
      Runnable r;

      while ( true )
      {
	synchronized ( queue )
	{
	  while ( queue.isEmpty() ) {
	    try {
	      queue.wait();
	    }
	    catch ( InterruptedException ignored ) {
	    }
	  }

	  r = ( Runnable ) queue.removeFirst();
	}

	// If we don't catch RuntimeException,
	// the pool could leak threads
	try {
	  r.run();
	}
	catch ( RuntimeException e ) {
	  // You might want to log something here
	}
      }
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?