Java-并发编程

进程:程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。

线程:一个线程就是一个指令流,将指令流中的一条条指令以一定顺序交给CPU执行

区别:• 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务 • 不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间 • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低(上下文切换指的是从一个线程切换到另一个线程)

创建线程的方式有哪些?

  • 共有四种方式可以创建线程,分别是:
    • 继承Thread类
    • 实现runnable接口
    •实现Callable接口
    •线程池创建线程

线程包括哪些状态,状态之间是如何变化的线程的状态可以参考JDK中的Thread类中的枚举State

public enum State {
//尚未启动的线程的线程状态
NEW,
从可运行线程的线程状态。
RUNNABLE,
//线程阻塞等待监视器锁的线程状态。
BLOCKED,
//等待线程的线程状态
WAITING,
//具有指定等待时间的等待线程的线程状态
TIMED_WAITING,
//已终止线程的线程状态。线程已完成执行
TERMINATED;

Thread.join() 其它线程中调用需等待该线程行结束 notify():随机唤醒wating的一个线程 notifyAll() :唤醒所有wating的线程

Java的wait 和 sleep方法

共同点: wait() , wait(long) 和 sleep(long) 的效果都是让当前线程暂时放弃CPU 的使用权,进入阻塞状态

不同点:
1.方法归属不同
• sleep(longing 是Thread的静态方法
• 而 wait() , wait(long) 都是 Object 的成员方法,每个对象都有
2.醒来时机不同
• 执行 sleep(long) 和 wait(long) 的线程都会在等待相应毫秒后醒来
• wait(long) 和 wait() 还可以被 notify 唤醒,wait() 如果不喚醒就一直等下去
• 它们都可以被打断唤醒
3.锁特性不同(重点)
• wait 方法的调用必须先获取 wait 对象的锁,而 sleep 则无此限制
• wait 方法执行后会释放对象锁,允许其它线程获得该对象锁
•而sleep 如果在 synchronized 代码块中执行,并不会释放锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值