在1的条件下,改为多客户端响应以及可以维护线程的状态,在需要时改为执行,不需要时等待
客户端代码见jdk6.0从入门到精通-----chapter8并发多线程(1)所示
package ThreadPool1;
import java.io.*;
import java.lang.*;
import java.net.*;
import java.text.*;
class ThreadManager
{
TheThread[] runner=null;
int count;
public static void main(String[] args) throws IOException
{
new ThreadManager(5).listen();
}
public ThreadManager(int count)
{
this.count=count;
}
private void listen() throws IOException
{
//建立线程池,启动所有线程
runner=new TheThread[this.count];
for(int i=0;i<this.count;i++)
{
runner[i]=new TheThread(i);
runner[i].start();
}
//侦听1024端口
ServerSocket serverSocket = new ServerSocket(1024);
while(true)
{
final Socket socket = serverSocket.accept();
Thread worker=new Thread()
{
public void run()
{
while(true)
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String cmd=in.readLine();
if(cmd==null)
break;
System.out.println("收到命令:"+cmd);
if(cmd.startsWith("run"))
for(int i=0;i<5;i++)
{
synchronized(runner[i])
{
runner[i].notify();
runner[i].command=0;
runner[i].status=1;
}
}
if(cmd.startsWith("pause"))
for(int i=0;i<5;i++)
{
synchronized(runner[i])
{
runner[i].command=1;
}
}
if(cmd.startsWith("step"))
for(int i=0;i<5;i++)
{
synchronized(runner[i])
{
if(runner[i].status==0)
{
runner[i].notify();
runner[i].command=0;
runner[i].status=1;
break;
}
}
}
if(cmd.startsWith("report"))
{
System.out.print("线程池中共有5个线程,");
int workingThreadCount=0;
for(int i=0;i<5;i++)
if(runner[i].status==1)
workingThreadCount++;
System.out.println("其中"+workingThreadCount+"个线程处于工作状态");
}
if(cmd.startsWith("stop"))
{
for(int i=0;i<5;i++)
{
synchronized(runner[i])
{
Thread.sleep(500);
runner[i].interrupt();
}
}
System.out.println("线程池已被销毁,程序退出");
break;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
};
worker.start();
}
}
}
class TheThread extends Thread
{
int no;
int command=0;
int status;//0:空闲中;1:运行中
public TheThread(int i)
{
this.no=i;
}
public void run()
{
try
{
this.status=1;
while(true)
{
Thread.sleep(1000);
if(this.command==1)
synchronized(this)
{
System.out.println("["+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())+"] "+"线程"+this.no+"开始等待...");
this.status=0;
this.wait();
}
}
}
catch(InterruptedException ie)
{
System.out.println("["+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())+"] "+"线程"+this.no+"被中止...");
}
}
}
分享到:
相关推荐
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/759558
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/759473
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/765024
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/759635
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/765052
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/764901
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/758765
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/768806
微信开发平台开发工具 JDK jdk 6.0 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008
开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8...
java6.0文档chm版,分成三部分,分别为JDK6.0+中文文档-lytim24.part1.rar、JDK6.0+中文文档-lytim24.part2.rar、JDK6.0+中文文档-lytim24.part3.rar
jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...
jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-...
java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...
这个是安装开发工具java jdk 有很多用途
jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...
java JDK1.8.60-jdk-8u60-windows-x64,java JDK1.8.60-jdk-8u60-windows-x64,java JDK1.8.60-jdk-8u60-windows-x64
jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586
jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64...
jdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windows