网络上的很多多线程例子,在一个方法里循环执行Thread.Start()之后,跳出方法并没有把原先开启的线程关闭,如果是socket监听,来一个请求就Start一个线程,会不会系统崩溃?还是系统自动把Start出来的线程关闭?还是有其他方法去销毁从别的方法内部创建的线程?
很想给你讨论一下线程的知识..首先你要知道线程的生命周期.新建(new thread)---就绪(runnable)---运行(running)--死亡(dead)这是大致的周题,当然在运行到死亡期间还会有堵塞了等等情况..
1线程死亡结束: 当线程执行完毕后,线程就进入了死亡状态,这时线程是不可能在进入就绪状态等待执行的.线程如果执行完run方法就自动死亡了.
2对于socket编程使用多线程时,如果来一个请求就start一个线程是会造成内存开销太大导致内存溢出,而导致系统崩溃.这时候你就应该用到线程池.可以参考以下代码:
1 class NetworkService implements Runnable { 2 private final ServerSocket serverSocket; 3 private final ExecutorService pool; 4 5 public NetworkService(int port, int poolSize) 6 throws IOException { 7 serverSocket = new ServerSocket(port); 8 pool = Executors.newFixedThreadPool(poolSize); 9 } 10 11 public void run() { // run the service 12 try { 13 for (;;) { 14 pool.execute(new Handler(serverSocket.accept())); 15 } 16 } catch (IOException ex) { 17 pool.shutdown(); 18 } 19 } 20 } 21 22 class Handler implements Runnable { 23 private final Socket socket; 24 Handler(Socket socket) { this.socket = socket; } 25 public void run() { 26 // read and service request on socket 27 } 28 }这样创建固定数量的线程,放入线程次中,就好比我们准备好了比如五个接待人员去接待n多个客户,当一个客户来了的时候就去线程次里面看有没有闲着的接待人员,如果有的话就让他去接待,如果没有就说明五个人都在接待客户了,那该客户就会处于等待中,当接待的一个客户走了,就会把该线程丢回线程次中,让去接待另一个客户.
3当程序run方法中自然结束时候,线程就被关闭了,
4如果你想销毁其他方法中创建的线程那就得用到线程间通信了,
谢谢解答
Thread会自动销毁,当然频繁创建和销毁是损耗性能的。
你可以使用ThreadPool.Queue……()来创建多线程程序,这个类帮你管理线程,不用你去创建,他根据内部资源进行创建,缓存,重用,销毁。
python中的功能实现用的restful的接口,怎么实现多线程啊
你所产生的thread,其实最后都是由操作系统来控制