粗略讲线程

来源:互联网 发布:香港底层 知乎 编辑:程序博客网 时间:2024/05/18 02:52

线程

一个进程就是一个独立应用程序,独占内存地址空间,多任务不是绝对意义的同时而是cpu在进程间来回切换

线程:线程是进程内部的一个独立的运行流程,同进程的线程共享内存地址空间,多线程也是cpu在线程来回切换,比进程切换效率高

1. 多线程

l  继承 extends Thread重写run方法,run方法相当于子线程的main方法

n   在main方法中调用子线程的start方法开启线程,不能调用run方法,调用run方法虽然不报错 但是相当于没有开启新线程只是普通的方法调用

l  继承 implements Runnable重写run方法

n   同样不能调用run方法,将接口对象放入thread  ThreadBtb = new ThreadB(); thread th = new Thread(tb);,调用start方法

2. 线程五种状态

l  通过New的方式产生一个新建状态

l  就绪状态(start启动,运行run方法之前)

l  运行状态(run方法执行期间)

l  死亡状态(run方法执行完毕)

l  中断状态

n   中断状态,由于优先级的原因,没有抢到cpu,也没有执行完毕

可以设置优先级,一共10级,最小为1,最大为10,默认为5

可设置this.setPriority(级别),优先级高并不一定会先执行,只是被cpu青睐的几率更高

n   阻塞,线程由于等待一个I/O操作时被堵塞

n   休眠,调用thread.sleep(毫秒数)可以休眠,醒来后并不是立即被执行,只是参与cpu抢夺

n   等待、唤醒,notify 第一个调用wait方法将会被唤醒 notifyAll 所有调用wait方法将会被唤醒,wait

n   挂起---------yield( ),很少使用

3.  线程安全性

l  当多个线程访问同一资源时,才会考虑线程安全性问题,安全性问题解决方案:加同步锁 synchronized

在资源方法修饰符后添加——方法同步锁

Synchronize(this.rs){书写多个被同步的方法}——同步块

死锁  当两个或多个线程同步访问一对循环依赖的资源的时候可能会会发生死锁现象,线程间通信——wait,notify

只能写在同步方法或同步块中,很难模拟。

0 0