发布网友 发布时间:2022-05-24 22:58
共3个回答
热心网友 时间:2023-11-09 21:36
1.每个窗体都有自己的都在不同的线程上运行,如果需要在窗体之间交互,就需要在线程之间交互。 2.当线程Sleep时,系统就退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而使线程回到执行队列中,从而恢复线程的执行。 3.如果父线程先于子线程结束,那么子线程将在父线程结束的同时*结束。Thread.Join()方法使父线程等待,直到子线程结束。 Abort()方法带来的后果是不可恢复的终止线程。 4.起始线程可以称之为主线程,如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR 将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。 6.挂起,睡眠(都可称为--阻塞,暂停) 与Thread.Sleep 不同,Thread.Suspend 不会使线程立即停止执行。直到线程到达安全点之后它才可以将该线程挂起。如果线程尚未启动或已经停止,则它将不能挂起。调用 Thread.Resume 将使另一个线程跳出挂起状态并使该线程继续执行。 一个线程不能对另一个线程调用Sleep ,但是一个线程可以对另一个线程调用Suspend。还可以使用许多其它的方式来阻塞线程。例如,可以通过调用 Thread.Join 使一个线程等待另一个线程(子线程)停止。使用 Monitor.Wait使一个线程等待访问一个同步对象。 5.关键字lock可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。多线程公用一个对象时,就不应该使用lock关键字了,这里Monitor,Monitor提供了使线程共享资源的方案。 Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。如: Monitor.Enter(obj); //现在oQueue对象只能被当前线程操纵了 Monitor.Exit(obj); 6.一个进程开始时至少会有一个主线程 ( 即主执行实例 ) ,这是在系统加载你的程序的时候所创建的主执行流程。而消息队列则是与线程 ( Thread ) 相关的,在似win2k上一个线程有一个且只有一个消息队列 ( queue ) 与之相对应。消息队列是在什么时候生成的呢? 在似win2k系统上,从一开始创建线程就已经有了。 一个线程可以创建多个窗体。统发送给这些窗口的消息都统一发送到同一个 消息队列 中,幸亏消息结构中有msg.hwnd指出该条消息与 哪一个窗口相关, DispatchMessage() 函数就是依照这个保证消息分派处理自动化而且不会出错! 7.每个窗体都属于创建它的线程,在一线程中直接访或间接问其它线程中的窗体的方法将导致运行时错误(VS2005)。解决方法:使用窗体从Control继承而来的Control.Invoke(Delegate)方法。该方法将在创建窗体的线程上执行委托指向的方法。注意:在VS2003下,可以在一个线程中直接或间接调用另一个线程中的窗体的方法,而不会导致运行时错误。热心网友 时间:2023-11-09 21:36
静态是通过关键字 static 来修饰的。
1、 方法(void )是在类内部的。 也就是 先有Class 后有void 如:
public class MyClass那么如果MyClass是静态类, 类内部的所有方法,都必须是静态方法。
而如果MyClass是普通的类,内部的方法也可以用static来修饰, 只有带static的方法是静态方法。
同理,静态类内部的变量也必须是静态的,而普通类内部可以声明静态变量。
然后回答你的问题,
1静态方法中可以引用静态字段和非静态字段吗?
都可以。
2非静态方法中可以引用静态字段和非静态字段吗?
都可以
3属性什么时候用静态,什么时候非静态?
静态属性、变量,也叫做“全局变量”。当你有一个属性需要到处都用的时候,就可以考虑把他声明成静态的。
比如一个系统,登录的时候会根据用户输入的账号(123)来获取用户名(张三)。那么可以把“用户名”作为一个静态属性, 登录的时候赋值,后面需要用的时候直接取就可以了,就不用每次都取根据账号来查询了。
而静态方法也是如此,当一个方法(大多数是无参方法、或者固定输入输出类型的常用方法)
就可以写成静态的,调用的时候就不用声明一个新的实例了。
静态类、方法优点是一直都在(静态。。),用起来简单,而缺点也明显,就是无法释放资源,比较复杂的函数一般都要写成动态的,否则太占资源。
热心网友 时间:2023-11-09 21:37
区别1:静态方法不用实例化,可直接调用,非静态需要实例化 ,也就是我们通常说的new
var useclass= new class();区别2:静态方法占用内存
这么说,静态字段和静态方法持续性占用内存单元。如果大量调用可以用
非静态的生命周期结束会快速被gc回收,一般考虑系统性能会尽量考虑使用静态方法的使用途径
追问大神,我现在就是纠结一般什么时候用静态,什么时候用非静态