1:线程的基本概念
线程是程序内部执行的顺序控制流(程序内不同的执行路径)
线程与进程的区别:
每个进程都有独立的代码块(进程上下文),进程间的切换会有较大的开销
线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运 行栈和程序计数器,线程切换开销小。
多线程:在同一应用程序中有多个顺序流同时执行
多进程:在操作系统中能用时运行多个任务(程序)
2:线程的创建和启动
JAVA的线程是通过java.lang.Thread类来实现的
JVM启动时会有一个由主方法所定义的线程
可以通过Therad的实例来创建新的线程(继承)
每个线程都是通过某个特定的Thread对象所对应的run()方法来完成其操作的,方法 run()称为线程体(不能抛出异常,只能try,catch)
通过调用Thread类的start()方法来启动一个线程
还可以通过实现Runable接口来创建新的线程(实现接口)(不能抛出异常,只能try, catch)
使用Runable接口可以为多个线程提供共享的数据
实现Runable接口的类的run()方法定义中可以使用Thread的静态方法
例:public static Thread currentThread()//获取当前线程的引用
3:线程的调度和优先级
IsAlive()//判断线程是否还“活”着
getPriority()//获得当前线程的优先级
setPriority()//设置当前线程的优先级
Thread.sleep()//设置当前线程睡眠毫秒数(互斥锁还存在)
Wait()//当前线程进入对象的wait pool(互斥锁丢失)
Notify()//唤醒对象的wait pool
NotifyAll()//唤醒所有对象的wait pool
Join()//“合并”某个线程
Interrupt()//停止某个线程
Yield()//让出CPU,给其他线程执行的时间
Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有的线程。线程调度器 按照线程的优先级来决定那个线程先执行(默认5),优先级范围从1到10。
4:线程同步
Synchronized(关键字)对象互斥锁,执行该方法时,锁定当前对象,以保证同步(只 有一个线程能使用),执行完成后才释放锁。
例:synchronized(‘锁对象’){
}任何对象都能做锁对象,JAVA同步机制利用该对象的intrinsic lock来判断是否锁住了代码块。
例:public synchronized void f( ){
//逻辑代码
}
将自动的获取调用该方法的对象上的intrinsic lock,在方法返回时释放。
实现同步时需要使用唯一、共享的锁对象,否则无法实现。