多线程编程

多任务处理有两种类型:

1、进程:指代一个独立的运行程序,独立的内存地址空间,CPU在进程间来回切换

2、线程:进程内部的一个运行分支,同一个进程中的线程共享内存地址空间,CPU在线程间也是来回切换,线程的切换比进程切换效率高

 

创建和启动线程:

1、实现方式1 : 继承Thread类,并重写run方法,在run方法中写入要执行的代码

需调用start方法启动线程,由start方法调用run方法,如果直接调用run方法则没有        

开启线程

2、实现方式2 : 实现Runnable接口,重写run方法,在run方法中写入要执行的代码

 

线程状态:

一、新建 ----new Thread

二、就绪 ----调用start(),在start()调用run()之前

三、运行 ----run()执行期间

四、中断 ----在run()执行期间,该线程没有被CPU执行的时间

中断原因:

1、没有抢到CPU

2、阻塞

3、休眠 Thread.sleep(休眠的毫秒数);

4、等待—唤醒        wait()等待,notify()唤醒,notifyAll()唤醒所有

5、挂起 yield();

注意:1、中断结束之后线程会去抢夺CPU,如果没抢到则继续中断

    2、默认情况下,所有线程优先级一样

Thread类的setPriority()可以设置线程优先级,默认值都为5,最高10级,最低1级,优先级高则代表被CPU选中的几率高,不一定都是先执行的

五、死亡 ----run()执行结束之后,回收资源

 

线程安全性:

线程同步:关键字synchronized

1、同步方法:一次只能被一个线程使用,该线程没有执行完,其他线程只能等待。

在资源类的方法中加关键字synchronized

2、同步块:

 

死锁:

当两个线程循环依赖于一对同步对象时将发生死锁。

 

线程间通讯:

wait();

notify();

posted @ 2017-03-24 14:31  WuHao_BkY  阅读(102)  评论(0编辑  收藏  举报