浅谈线程

来源:互联网 发布:南京软件 外包公司 编辑:程序博客网 时间:2024/04/30 11:48

1线程安全

              一个进程有多个线程,这些线程可能同时执行同一段代码,如果多个线程同时执行一段代码和单个线程执行这点代码产生的结果相同那么就说是线程安全的,如果有差异那么就是非线程安全的,对于非线程安全的情况就通过关键字synchnonize关键字,即这段代码当前已经有了一个线程来执行了,那么就必须等这个线程执行完这段代码之后才会允许其他的线程来执行(类似于事务的ISOLATION_SEARIALIZABLE隔离级别(事务处理按照顺序来执行)),那么就避免出来脏读的现象

2线程实现的方式

               实现RUNNABLE和继承THREAD

3线程安全原理

               jvm(java虚拟机)有一个mainMemory,每一个线程有一个workMemory,比如一个变量,它会先把这个变量load到workMemory中,然后use&assign,最后再copy到                                mainMemory中。如果同一段代码有多个线程要执行,如果给这段代码加上一个锁,那么在当前线程拥有这个锁的情况下,会先执行完这个过程,然后才释放锁,然后才                  可以被其他的进程获得,执行这段代码,也就是之前的这样理解的:线程有了锁才可以执行代码,没有锁,只有等待其他的线程释放锁,如果能够获得,才可以执行代码

4锁基本上都是内核对象,用于控制进程和线程间同步,如果进程同步了,那么该进程中的所有的线程都同步了,让进程中的线程同步只需要在用户模式下,所以相比之下如果是通过进程同步而使得线程同步的话,性能会大大降低

5(1)多线程技术的应用为了解决这样的一个问题:处理器处理一个线程,为了降低处理器闲置的时间,就采用了让处理器处理多个线程

 (2)服务器执行一个任务需要花费的时间:T1创建线程的时间 T2线程执行任务的时间 T3销毁线程的时间

因为每一个任务T2可能是不一样的,但T1和T3是一样的,所以想办法把T1和T3的和减少,那么线程池技术就运用而生了

a.线程池的管理(ThreadPool)(创建一个线程池,销毁一个线程池,创建一个任务)

b.工作线程(PoolWorker):线程池中的线程,如果没有任务的话,就会等待

c.任务接口(Task):每一个任务必须实现这个接口,只有实现了这个接口,才可以被线程池中的线程调度这个任务

d.任务队列(TaskQueue):给任务提供一个缓冲机制


0 0
原创粉丝点击