线程相关

来源:互联网 发布:mac发布会时间 编辑:程序博客网 时间:2024/04/19 10:03

线程相关

1、多线程一定运行速度快吗?

a、不一定,多线程很多资源耗费在线程的上下文切换上,可以通过 jstack 查看空闲的线程数(waiting状态)。
b、上下文切换:CPU为每个任务分配一个时间片,在某个时间片执行某个任务,切换到下一个任务时,需要记录上一个任务的状态信息,使的下次继续执行时可以加载任务的信息。任务状态从保存到加载就是一个上下文切换

2、多线程通信方式:公共内存,消息传递

公共内存块

一个线程将数据同步到公共内存中,另外的线程再从公共内存中取数据,从而达到数据同步

消息传递

直接通过线程间传递消息,常用方法:

Thread.wait()
当前线程等待,进入等待队列,并释放锁
Thread.notify()
唤醒等待在该锁上的一个线程,使其进入同步队列;必须等当前队列释放锁后,等待的线程获得锁后,等待的线程才能继续work
Thread.notifyAll()
唤醒等待在该锁上的所有线程,使其进入同步队列;唤醒所有等待线程,但是只有一个线程能拿到锁;必须等当前队列释放锁后,等待的线程获得锁后,等待的线程才能继续work

如:

Object lock = new Object();Thread1 {    Synchronized(lock) {        // wait 后释放锁,等待唤醒处理        lock.wait();        // 被 Thread2 唤醒后,获取到锁,继续work        do something1.    }}
Thread2 {    Synchronized(lock) {        // 唤醒 lock 上等待的线程        lock.notify();        do something2.    } // 处理完后,释放锁,Thread1才有机会获取到锁}

3、线程常用方法

Thread.start()

启动线程

Thread.run()

线程运行方法,该方法结束后,线程结束

Thread.interrupted()

中断线程,如果线程处于work状态可中断,如果处于sleep状态,则不可中断(中断不起作用,待定)?

Thread.join()

等待线程执行完毕

Thread.suspend()

已废弃,暂停线程

Thread.resume()

已废弃,恢复线程

Thread.stop()

已废弃,停止线程;停止线程可以采用标志位的方式来处理
0 0
原创粉丝点击