线程基础
1 线程的run()方法中可以调用其他方法、构造其他对象,甚至可以生成其他线程。
但是线程要在这里启动,并在这里结束。当run()方法完成时,线程也就消失了。
事实上,run()对于线程,就像main()对于非线程化的传统程序一样。
单线程程序会在main方法返回时退出,
多线程程序则需要main方法和所有非守护线程都返回时才退出。
2 如何返回线程的信息?
1)轮询 - 低效
2)回调 - 节省CPU资源,更重要的是回调更灵活,可以处理涉及更多线程、对象的复杂情况:e.g. 多个对象关心某一线程的计算结果,采用监听者模式。
3 方法被哪个线程调用就是被哪个线程执行,而不是看它定义在哪个类中。
4 要避免在构造函数中启动线程,特别是当线程将回调初始对象的时候
这里有一个竞争条件,可能会让新线程在构造函数结束和对象完全初始化之前进行回调。
同步
1 Java只能防止对同一对象同步的其他线程使用共享资源,并没有提供阻止其他所有线程使用共享资源的方法。
2 同步的替代方式
1)使用局部变量代替字段,每次进入一个方法时,虚拟机将为该方法创建全新的局部变量集合。
一个局部变量不会用于两个不同的线程,每个线程有其自己的局部变量集。
2)利用不可变性:所有字段声明为私有,不要编写任何可以改变他们的方法
3)只将非线程安全的类用作线程安全的类的私有字段
3 死锁
防止死锁最重要的技术是避免不必要的同步。
同步应该是保证线程安全的最后一种手段。
4 同步 vs 异步 VS. 阻塞 vs 非阻塞
同步、异步用于描述宏观层面的数据收发特征,
阻塞、非阻塞是底层数据读写特征,read(buf, length),
阻塞的read如果没有读到指定length的数据就会愣等在原地,即为阻塞;
非阻塞的read则会立即返回,返回值为当前读到的数据长度。
分享到:
相关推荐
线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。 举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000 举例2...
C#线程同步的几种方法 C#线程同步的几种方法
.NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,...
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
MFC 多线程及线程同步 MFC 多线程及线程同步 MFC 多线程及线程同步
java线程同步java线程同步java线程同步
简单学习用例,利用线程锁对线程同步进行控制,保证对公共资源的访问不出现错误!
本文件为操作系统中的线程同步实验的实验报告,有详细的代码和解释。
线程同步的四种方法的代码。事件 互斥量 信号量 临界区
多线程中的同步问题的几种解决方案,新手可以看看。主要通过临界区线程同步,互斥内核对象、事件内核对象,信号量内核对象来实现线程同步问题。
介绍了linux线程同步的所有方式,包括互斥、自旋、信号量、条件变量等技术
操作系统实验 多线程同步与互斥 java编写 可动态创建
通过模拟公交车运行时,司机,售票员以及乘客之间的同步状态来实现线程同步
很不错的Delphi多线程和线程同步的例子,完整源码 原来的一个不知道CSDN怎么把文件搞丢了!新传一个资源,包含一个线程排序的例子!代码均搜集自网上!
C#_线程同步lock,Monitor,Mutex,同步 互斥 监控 锁
简单实现多线程同步示例(模拟购票系统),内容为实现多线程同步过程,模拟购票系统进行同步购买情况;该处并未考虑线程守护问题,后期将对线程锁等安全问题进行初步研究!
C#线程同步,多个线程去执行,检测到最后一个线程执行完成,主线程继续执行其他业务AutoResetEvent
本工程中包含了线程同步的五种方法,现在拿出来和大家一起分享,VC6.0编译测试通过,工程中包含了5个小工程,具体讲述每种线程同步方法的具体使用列子,而且有详细的注释。
线程同步技术剖析!! 自己看了还不错!需要的下吧
多线程同步解决卖票问题