对象 :对象的抽象是类,类的实例(具体化)是对象,总的来说类是虚构的所以说他抽象,而对象是实实在在的所以说他是对象,换种说法 因为类是抽象的,是不存在的,所以在计算机里类是没有内存的而实例化的过程就是给类分配内存,所以哪个 new 的对象 实际上就是计算机给哪个类分配的内存,再通俗点的说法就是 人类是对象,鸭子是对象,鲸鱼是对象,兔子是对象,虫子是对象, 他们同属 动物 这一个 类 (所以说类是啥,不就是归类呗,按照啥归类呢?按照对象们具备的某种特有的共性进行归类,所以说类不就是对对象的描述有嘛)
对象,什么是对象,万物有灵,世间万物一切皆为对象,
网络篇:::
System.Net.Sockets :套接字类相当于提供一个接口
Socket :是一个底层的类这个类用于管理连接,webRequest,TcpClient 和UpClient 在内部使用这个类
NetworkStream :是从Stream 派生出来的 表示来自网络的数据流
TcpClient :创建和使用TCP连接请求
TcpListener :允许监听传入的TCP 连接请求
UdpClient :用于UDP 客户创建连接(UDP 是另一种 TCP 协议(广播式) 一对多的关系)
线程:
多线程是完成任务的一种方法,高并发是系统运行的一种状态
Threading 类:创建和控制线程
进程是资源分配单位,线程是CPU调度单位,时间片 是指 CPU 配额给线程的时间(或者说是线程占用CPU 的时间)
你的资源是共享的,因为你是一个静态类啊兄嘚
有优先级 运行内存有限分配给前 31
使用线程的好处就是提高CPU的利用率(提高程序的运行速度)
线程(动作)和进程(事件)是相对的,一个进程有多个线程,每个程序(进程,事件)都是一个线程(都有一个主线程(最开始创建的),和类相似,虽然他就是一个类。。。,他们都是抽象的(虚构的),
所谓静态属性,就是这个类所有对象所公有的属性,不管你创建了多少个这个类的实例,但是类的静态属性在内存中只有一个。很容易理解CurrentThread为什么是静态的——虽然有多个线程同时存在,但是在某一个时刻,CPU只能执行其中一个。所以是当前线程永远只有一个
start 开始
IsAlive 获取一个值,该值指示当前线程的执行状态。
sleep(int) 静态方法 当前线程挂起的时间
Abort 关闭当前线程
Join 阻塞调用线程,直到此实例所表示的线程终止,
CurrentThread 获取当前线程
Thread.ThreadState 运行时的状态,在不同的情况下会有不同的值
举个栗子:
Aborted:线程已停止;
AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;
Background:线程在后台执行,与属性Thread.IsBackground有关;
Running:线程正在正常运行;
Stopped:线程已经被停止;
StopRequested:线程正在被要求停止;
Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);
SuspendRequested:线程正在要求被挂起,但是未来得及响应;
Unstarted:未调用Thread.Start()开始线程的运行;
WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态;
前台和后台线程:后台的线程结束后不会组织程序的终结,但是前台线程会,(会有种情况就是,你把软件关掉了,但是认为进程哪里还显示他没有被关掉,这是因为有前台线程在阻止程序关闭,还在蹭CPU资源。。。)
Background状态表示该线程在后台运行,那么后台运行的线程有什么特别的地方呢?其实后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR(通用语言运行环境)将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。
原理:
只要当前程序的所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。
当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。
在C#程序中的线程是有优先级的,Highest,AboveNormal,Normal,BelowNormal,Lowest,如过不设置的话,系统会默认为ThreadPriority.Normal
//设定优先级为最低
线程的名字.Priority=ThreadPriority.Lowest;
线程锁:
线程锁的意义:每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。但是多线程环境下,可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。
C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待,保证这段线程是代码安全的(和单线程一样)(或者换种说法,就是把其他线程锁住,只执行当前的线程)
(相当于信号枪,一次只能开一枪,线程就是子弹)
代码:
public class nana
{
public void pr()
{
//lock (this)//线程锁,就是把其他线程锁住,只执行当前线程
//{
for (int i = 0; i <= 10000; i = i + 2)
{
Console.WriteLine(Thread.CurrentThread.Name + “–” + i);
}
// }
}
public void na()
{
//lock (this)
// {
for (int i = 1; i <= 10000; i = i + 2)
{
Console.WriteLine(Thread.CurrentThread.Name + “–” + i);
}
// }
}
static void Main(string[] args)
{
nana program = new nana();
ThreadStart ts1 = new ThreadStart(program.na);
Thread t1 = new Thread(ts1);
t1.Name = “打印奇数的线程”;
t1.Start();
ThreadStart ts2 = new ThreadStart(program.pr);
Thread t2 = new Thread(ts2);
t2.Name = “打印偶数的线程”;
t2.Start();
}
}
#region 分页查询方法
DataTable ChaXunShuJu(int intPageLineCount, int intCurrentPage, bool bolSeleteSum, bool bolInvertedOrder)
{
if (txtSelectContent.Text != "")
{
strWhere = "line_name like '%'+'" + txtSelectContent.Text.Trim() + "'+'%'" +
" or simple_code like '%'+'" + txtSelectContent.Text.Trim() + "'+'%'" +
" or note like '%'+'" + txtSelectContent.Text.Trim() + "'+'%'";
//累加模糊查询内容
}
decPageCount = Convert.ToDecimal(myPublicFunction.PublicPagingSelect(strTblName, strGetFields, strFldName, intPageSize, intPageIndex, true, true, strWhere).Tables[0].Rows[0][0]);//获取查询结果的行数
if (decPageCount / intPageLineCount <= Convert.ToInt32(decPageCount / intPageLineCount))//判断有多少页
{
decPageCount = Convert.ToInt32(decPageCount / intPageLineCount);
}
else
{
decPageCount = Convert.ToInt32(decPageCount / intPageLineCount) + 1;
}
if (intCurrentPage > decPageCount)//如果当前页数大于最大页数,则重新赋值为最大页数
{
intPageIndex = (int)decPageCount;
intCurrentPage = (int)decPageCount;
}
if (intPageIndex == 0 || intCurrentPage == 0) {
intPageIndex = 1;
intCurrentPage = 1;
}
lblMaxPage.Content = decPageCount.ToString(); txtCurrentPage.Text = intCurrentPage.ToString();
return myPublicFunction.PublicPagingSelect(strTblName, strGetFields, strFldName, intPageLineCount, intCurrentPage, bolSeleteSum, bolInvertedOrder, strWhere).Tables[0];//返回查询出来的结果
}
#endregion