<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java中的線程池實例代碼

    時間:2025-12-18 15:55:24 志升 java語言

    java中通用的線程池實例代碼

      在日常學習、工作和生活中,大家對java都再熟悉不過了吧,下面是小編為大家整理的java中通用的線程池實例代碼,希望對大家有所幫助。

      復制代碼 代碼如下:

      package com.smart.frame.task.autoTask;

      import java.util.Collection;

      import java.util.Vector;

      /**

      * 任務分發器

      */

      public class TaskManage extends Thread

      {

      protected Vectortasks = new Vector();

      protected boolean running = false;

      protected boolean stopped = false;

      protected boolean paused = false;

      protected boolean killed = false;

      private ThreadPool pool;

      public TaskManage(ThreadPool pool)

      {

      this.pool = pool;

      }

      public void putTask(Runnable task)

      {

      tasks.add(task);

      }

      public void putTasks(Runnable[] tasks)

      {

      for (int i = 0; i < tasks.length; i++)

      this.tasks.add(tasks[i]);

      }

      public void putTasks(Collectiontasks)

      {

      this.tasks.addAll(tasks);

      }

      protected Runnable popTask()

      {

      if (tasks.sixx() > 0) return (Runnable) tasks.remove(0);

      else return null;

      }

      public boolean isRunning()

      {

      return running;

      }

      public void stopTasks()

      {

      stopped = true;

      }

      public void stopTasksSync()

      {

      stopTasks();

      while (isRunning())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public void pauseTasks()

      {

      paused = true;

      }

      public void pauseTasksSync()

      {

      pauseTasks();

      while (isRunning())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public void kill()

      {

      if (!running) interrupt();

      else killed = true;

      }

      public void killSync()

      {

      kill();

      while (isAlive())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public synchronized void startTasks()

      {

      running = true;

      this.notify();

      }

      public synchronized void run()

      {

      try

      {

      while (true)

      {

      if (!running || tasks.si ze() = = 0)

      {

      pool.notifyForIdleThread();

      this.wait();

      }

      else

      {

      Runnable task;

      while ((task = popTask()) != null)

      {

      task.run();

      if (stopped)

      {

      stopped = false;

      if (tasks.sixx() > 0)

      {

      tasks.clear();

      System.out.println(Thread.currentThread().getId() + ": Tasks are stopped");

      break;

      }

      }

      if (paused)

      {

      paused = false;

      if (tasks.sixx() > 0)

      {

      System.out.println(Thread.currentThread().getId() + ": Tasks are paused");

      break;

      }

      }

      }

      running = false;

      }

      if (killed)

      {

      killed = false;

      break;

      }

      }

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      return;

      }

      }

      }

      復制代碼 代碼如下:

      package com.smart.frame.task.autoTask;

      import java.util.Collection;

      import java.util.Iterator;

      import java.util.Vector;

      /**

      * 線程池

      */

      public class ThreadPool

      {

      protected int maxPoolSize = TaskConfig.maxPoolSize;

      protected int initPoolSize = TaskConfig.initPoolSize;

      protected Vectorthreads = new Vector();

      protected boolean initialized = false;

      protected boolean hasIdleThread = false;

      public ThreadPool()

      {

      super();

      }

      public ThreadPool(int maxPoolSize, int initPoolSize)

      {

      this.maxPoolSize = maxPoolSize;

      this.initPoolSize = initPoolSize;

      }

      public void init()

      {

      initialized = true;

      for (int i = 0; i < initPoolSize; i++)

      {

      TaskManage thread = new TaskManage(this);

      thread.start();

      threads.add(thread);

      }

      }

      public void setMaxPoolSize(int maxPoolSize)

      {

      this.maxPoolSize = maxPoolSize;

      if (maxPoolSize < getPoolSize()) setPoolSize(maxPoolSize);

      }

      /**

      * 重設當前線程數 若需殺掉某線程,線程不會立刻殺掉,而會等到線程中的事

      * 務處理完成 但此方法會立刻從線程池中移除該線程,不會等待事務處理結束

      */

      public void setPoolSize(int size)

      {

      if (!initialized)

      {

      initPoolSize = size;

      return;

      }

      else if (size > getPoolSize())

      {

      for (int i = getPoolSize(); i < size && i < maxPoolSize; i++)

      {

      TaskManage thread = new TaskManage(this);

      thread.start();

      threads.add(thread);

      }

      }

      else if (size < getPoolSize())

      {

      while (getPoolSize() > size)

      {

      TaskManage th = (TaskManage) threads.remove(0);

      th.kill();

      }

      }

      }

      public int getPoolSize()

      {

      return threads.sixx();

      }

      protected void notifyForIdleThread()

      {

      hasIdleThread = true;

      }

      protected boolean waitForIdleThread()

      {

      hasIdleThread = false;

      while (!hasIdleThread && getPoolSize() >= maxPoolSize)

      {

      try

      {

      Thread.sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      return false;

      }

      }

      return true;

      }

      public synchronized TaskManage getIdleThread()

      {

      while (true)

      {

      for (Iteratoritr = threads.iterator(); itr.hasNext();)

      {

      TaskManage th = (TaskManage) itr.next();

      if (!th.isRunning()) return th;

      }

      if (getPoolSize() < maxPoolSize)

      {

      TaskManage thread = new TaskManage(this);

      thread.start();

      threads.add(thread);

      return thread;

      }

      if (waitForIdleThread() == false) return null;

      }

      }

      public void processTask(Runnable task)

      {

      TaskManage th = getIdleThread();

      if (th != null)

      {

      th.putTask(task);

      th.startTasks();

      }

      }

      public void processTasksInSingleThread(Runnable[] tasks)

      {

      TaskManage th = getIdleThread();

      if (th != null)

      {

      th.putTasks(tasks);

      th.startTasks();

      }

      }

      public void processTasksInSingleThread(Collectiontasks)

      {

      TaskManage th = getIdleThread();

      if (th != null)

      {

      th.putTasks(tasks);

      th.startTasks();

      }

      }

      }

      復制代碼 代碼如下:

      package com.smart.frame.task.autoTask;

      public class TopTask implements Runnable

      {

      private ThreadPool pool;

      public TopTask()

      {

      super();

      }

      public TopTask(ThreadPool pool)

      {

      super();

      this.pool = pool;

      }

      @Override

      public void run()

      {

      init();

      start();

      }

      /**

      * 初始化驗證權限、參數之類

      */

      public void init()

      {

      }

      /**

      * 開始自動任務

      */

      public void start()

      {

      for (int i = 0; i < 10; i++)

      {

      pool.processTask(new BeginAuto());

      }

      }

      }

      /**

      * 實現類

      */

      class BeginAuto implements Runnable

      {

      @Override

      public void run()

      {

      System.out.println(Thread.currentThread().getId() + "..................");

      }

      }

      復制代碼代碼如下:

      package com.smart.frame.task.autoTask;

      import java.util.Collection;

      import java.util.Vector;

      /**

      * 任務分發器

      */

      public class TaskManage extends Thread

      {

      protected Vector tasks = new Vector();

      protected boolean running = false;

      protected boolean stopped = false;

      protected boolean paused = false;

      protected boolean killed = false;

      private ThreadPool pool;

      public TaskManage(ThreadPool pool)

      {

      this.pool = pool;

      }

      public void putTask(Runnable task)

      {

      tasks.add(task);

      }

      public void putTasks(Runnable[] tasks)

      {

      for (int i = 0; i < tasks.length; i++)

      this.tasks.add(tasks[i]);

      }

      public void putTasks(Collection tasks)

      {

      this.tasks.addAll(tasks);

      }

      protected Runnable popTask()

      {

      if (tasks.sixx() > 0) return (Runnable) tasks.remove(0);

      else return null;

      }

      public boolean isRunning()

      {

      return running;

      }

      public void stopTasks()

      {

      stopped = true;

      }文章來源地址/pic/blog/74008.html

      public void stopTasksSync()

      {

      stopTasks();

      while (isRunning())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public void pauseTasks()

      {

      paused = true;

      }文章地址/pic/blog/74008.html

      public void pauseTasksSync()

      {

      pauseTasks();

      while (isRunning())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public void kill()

      {

      if (!running) interrupt();

      else killed = true;

      }

      public void killSync()

      {

      kill();

      while (isAlive())

      {

      try

      {

      sleep(5);

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      }

      }

      }

      public synchronized void startTasks()

      {

      running = true;

      this.notify();

      }

      public synchronized void run()

      {

      try

      {

      while (true)

      {

      if (!running || tasks.si ze () == 0)

      {

      pool.notifyForIdleThread();

      this.wait();

      }

      else

      {

      Runnable task;

      while ((task = popTask()) != null)

      {

      task.run();

      if (stopped)

      {

      stopped = false;

      if (tasks.sixx() > 0)

      {

      tasks.clear();

      System.out.println(Thread.currentThread().getId() + ": Tasks are stopped");

      break;

      }

      }

      if (paused)

      {

      paused = false;

      if (tasks.sixx() > 0)

      {

      System.out.println(Thread.currentThread().getId() + ": Tasks are paused");

      break;

      }

      }

      }

      running = false;

      }

      if (killed)

      {

      killed = false;

      break;

      }

      }

      }

      catch (InterruptedException e)

      {

      TaskException.getResultMessage(e);

      return;

      }

      }

      }

    【java中的線程池實例代碼】相關文章:

    Java實現在不同線程中運行的代碼實例詳解05-14

    java線程池框架解析03-07

    什么是java線程池框架03-12

    Java 5線程池使用04-22

    java線程池框架是什么01-11

    java線程池框架解析方法05-04

    java多線程-線程通信實例詳細解讀02-03

    Java優先級線程代碼示例03-21

    java多線程同步塊實例講解素材03-03

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人