代码改变世界

多线程编程

2014-05-11 21:39  pandeng0120  阅读(120)  评论(0编辑  收藏  举报

概念区分:

进程:一个正在运行的程序称为一个进程,每个进程有自己独立的内存空间,每个进程的内部数据和状态都是独立的。

 

线程:一个程序在同一时间内可以运行多个任务,每个任务称为一个线程,同一进程中的所有线程都在同一内存空间中工作,共享同一内存和系统资源。

 

创建线程的方式:

1,通过继承Thread类来创建线程    调用.start()方法开始运行线程

2,通过实现Runnable接口来创建线程       创建一个Thread类的对象,将实现接口的类的对象作为参数放入Thread类对象的参数列表中,调用该Thread类对象的start()方法运行线程

 

线程的状态流程:

新建(new)-就绪(Runnable)-运行(Running)-死亡(Dead)

运行状态又分为四种:

1,sleep,睡眠;2,wait,等待;3,yield,挂起;4,阻塞

sleep和wait的区别:

1,sleep是时间一到自动醒来,wait需要由notify方法唤醒

2,sleep是Thread类的方法,wait是Object类的方法

3,sleep可以用在所有线程中,wait只能用在同步的线程中

4,sleep执行中不能释放锁,wait执行中会释放锁

 

线程的同步:

概念:两个以上的线程要访问共享资源时,同一时间点只有一个线程能够存取共享资源的过程称之为同步

关键字:Synchronized   一种使用方法是作为类名的修饰符,另一种方法是建立Synchronized(){}同步块

优点:数据安全性高

缺点:效率低,并可能造成死锁(对象锁由另一个进程占据,无法获得造成。可使用wait()方法自动释放锁来解决)

线程的异步:

概念:与同步相反

优点:效率高

缺点:数据不安全

 

经典应用:生产者和消费者