很多程序在创建线程都这样写的:ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象.我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的.线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread返回到你CloseHandle().2…
今天在测试程序的时候,在[任务管理器]中发现进程序的句柄随着多线程的不断运行,会不断的 +1. 发现原来在我的代码中,启动线程后都没有显式的调用 CloseHandle() 来关闭线程句柄. 当我准备写关柄句柄的代码时,我有个疑问,如果线程还没有结束的时候,使用 CloseHandle() 来关闭线程句柄,是否会影响线程的运行呢? 百度了一下,找到答案:https://blog.csdn.net/rainminism/article/details/8509857 内容就直接复制过来,也不算多:…
 什么是句柄:句柄是一种指向指针的指针.我们知道,所谓指针是一种内存地址.应用程序启动后,组成这个程序的各对象是住留在内存的.如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象.但是,如果您真的这样认为,那么您就大错特错了.我们知道,Windows是一个以虚拟内存为基础的操作系统.在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要.对象被移动意味着它的地址变化了.如果地址总是如此变化,我们该到哪里去找该对象呢?为了…
什么是句柄 句柄是一种指向指针的指针.我们知道,所谓指针是一种内存地址.应用程序启动后,组成这个程序的各对象是住留在内存的.如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象.但是,如果您真的这样认为,那么您就大错特错了. 我们知道,Windows是一个以虚拟内存为基础的操作系统.在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要.对象被移动意味着它的地址变化了.如果地址总是如此变化,我们该到哪里去找该对象呢? 为…
●CreateThread() API 用于创建线程. API 返回同时线程句柄,并通过参数得到线程标识符 (ID). 线程句柄有完全访问权创建线程对象. 运行线程时线程 ID 唯一标识线程在系统级别.●ID是在Windows系统范围内唯一标示Thread的.   ●Handle是用来操作Thread的,可以有多个,每个HANDLE可以有不同的操作权限,在不同进程OpenThread得到的值不一样.   ●线程的ID是系统全局的,其HANDLE是进程局部的. ●此ID只在线程的生存期内有效. ●…
昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: 守护进程的结束取决于被守护的对象的进程何时结束 互斥锁 # 锁: 将并发变成串行 牺牲了效率 但是保证了数据的安全 # 代码: mutex.require() 抢锁 mutux.release() 释放锁 ''' 锁虽然好用 但是不要轻易使用 容易造成死锁现象(今后也不会让我们自己处理锁 但是要理…
掌握Java中的多线程,必须掌握Java中的各种锁,以及了解Java中线程池的运用.关于Java多线程基础总结可以参考我的这篇博文Java多线程总结(一)多线程基础 转载请注明出处——http://www.cnblogs.com/zrtqsk/p/3784049.html,谢谢. 一.Java中锁 什么是锁.锁就是为了保护资源,防止多个线程同时操作资源时出错的机制. 我们先来看一下锁的类图: 如图,Java中的锁有两个主要的根接口——Lock和ReadWriteLock,分别表示锁和读写锁.其中…
基本概念 什么是进程?        当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.一个进程至少有一个主线程. 什么是线程?        线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程?        多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 多…
tomcat关闭后线程依然运行解决办法,设置线程为守护线程 守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户线程和守护线程 所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程.反过来说,只要任何非守护线程还在运行,程序就不会终止. 守…
1:锁(Lock) 1.1       java提供了一个锁的接口,这个锁同样可以达到同步代码块的功能,API文档上说使用锁比使用synchronized更加灵活. 1.2       如何使用这个“锁” //1.创建一个所对象,我们可以理解为写一个synchronized代码块 public static Lock lock = new ReentrantLock();//用lock的一个子类去创建 //2.假设有某程序中使用两把锁,这两把锁是类似于synchronized里的锁 //要使用到…