一个进程是可以有多个线程的
不同的进程之间是有独立的地址空间的
多个线程可以同时共享进程的存储空间 我个人理解是共享进程的静态存储空间和堆存储空间 至于栈的话 那么应该是无所谓的事了 不同的线程应该不会有什么冲突的 不过我这块有些不明白的地方 先这样吧 以后有新的体会我在补充
什么是线程安全?线程安全是怎么完成的(原理)?
线程安全就是说多线程访问同一代码,不会产生不确定的结果。编写线程安全的代码是低依靠线程同步。
比如说单件这个例子,如果在new的时候不加锁,那么就不是线程安全的,原因在于多线程的情况下,可能会产生两个对象,所以就需要加锁实现线程安全。
线程的安全是通过同步实现的,也就是加锁的方式。
多线程是用来实现并发的,就是说多个线程同时去运行,同步呢,就是在并发的同时,在遇到共享资源操作的时候,消除并发,让每个线程逐个去执行共享资源操作的代码。
copy一段话:
一个线程安全的类满足以下几个条件:
1、这个类的对象可以同时被多个线程安全的访问
2、每个线程都能正常的执行原子操作,等到正确的结果
3、在每个线程的原子操作完成后,对象处于逻辑上合理的状态
为了实现线程安全,往往以牺牲并发的性能为代价,为了减少这一负面的影响,可采取以下措施:
1、只对可能导致资源竞争的代码进行同步,如打水问题中的井,就是一个共享资源,打水操作就是导致资源竞争的代码
2、如果一个可变类有两个运行环境:一个单线程环境一个是多线程环境,那么可以为这个类提供两种实现,在单线程的环境中采用为同步的实现类,在多线程环境中采用同步类的实现,所谓多线程环境是指类的同一个对象会被多个线程同时访问,例如java里的hashset是线程不安全的HashSet set1=(HashSet) Collections.synchronizedSet(new HashSet());能够返回原始hashset集合的同步版本,在多线程环境中可以访问这个同步版本