一.多线程的实现方案:
1.继承Thread类
2.实现Runnable接口
二.线程的调度和优先级问题:
1.线程的调度
A:分时调度
B:抢占式调度(Java采用的就是这种);
2.获取和设置线程的优先级
获取对象的优先级:
public final int getPriority();
设置对象的优先级
public final void setPriority();
A:默认是5
B:范围是1-10;
三.线程的控制:
A:线程休眠:Thread.sleep(long millis);
B:线程加入:public final void join(); 等待该线程终止再执行其他的.
C:线程礼让:public static void yield();暂停当前正在执行的线程对象,并执行其他线程.让多个线程的执行更和谐,但是不能保证一个线程执行一次.
D:守护线程:public final void setDaemon(boolean on);将该线程标记为守护线程或用户线程.当正在运行的线程都是守护线程的时候,Java虚拟机退出,该方法必须在启动线程前调用.
E:线程终止:stop():这个方法已经过时;现在用public void interrupt();中断线程,把线程状态终止,并且抛出一个InterruptedException.
四.出现线程安全问题的原因以及解决办法:
1.原因:
A:是否有多线程环境.
B:是否有共享数据.
C:是否有多条语句操作共享数据.
2.解决办法:
A:同步代码块
synchronized (同步锁对象) {
需要被同步的代码;
}
这里的锁对象可以是任意对象.
B:同步方法:
把同步关键字加在方法上.
a:非静态方法
这里的锁对象是this.
b:静态方法:
这里的锁对象是类的字节码文件对象.