基本概念
线程 一堆命令的集合,进程静止的状态,包括了软件文件集合
进程 程序运行期间的动态状态,占用内存,cpu等资源
线程 进程下的最小执行单元
多任务 两种类型: 基于线程 基于进程
基于线程的的优点:1.开销少 2.进程间的调用涉及开销比线程通讯多
3.线程间的切换成本低
多线程 1.Java中,一个程序可以包含多个线程,并可以并发执行
2.多线程让系统的cup利用率提高
3.隐藏cup在任务间切换的事实
主线程 在java程序启动时,立即启动
作用:1.产生其他子线程,2.执行各种关闭动作
易错点 1.主线程不一定负责关闭其他子线程
2.主线程不一定是最后结束的(守护线程)
线程基础运用
1.获取当前线程
Thread thread=Thread.currentThread();
2.判断线程是否存活
thread.isAlive()
3.让线程休眠
// 线程休眠(以毫秒未单位)5秒
thread.sleep(5000);
4.等待线程消亡
thread.join();//等待线程消亡
创建线程
创建线程的两个方法
1.创建类,使类继承Threaded重写run 方法
2.实现接口
Thread thread3=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程实现接口,匿名内部类");
}
});
thread3.start();
易错点
启动线程的时候要用start()方法
若使用run() 方法不算线程启动,仅仅是方法的调用
守护线程
用来于服务用户线程(Java的垃圾回收线程就是守护线程)
当主线程已经关闭但子线程还没有关闭,就可以设置一个守护线程来关闭子线程。
设置守护线程
thread2.setDaemon(true);//设置未守护线程
thread1.start();
thread2.start();
注意: 1.setDaemon(true),必须在start()之前设置,否则会出现异常
2.守护线程中产生的子线程也是守护线程
设置线程优先级
注意: 1.优先级从低到高:1-10
2.注意:优先级低不代表拿不到资源
t1.setPriority(1);//设置优先级
易错
- 下面哪些情况能停止当前线程的运行:抛出一个例外时
- 当run方法执行完时,线程死亡
线程的并发
并发的原因:有两个及以上的线程,同时访问同一个不同步的资源
解决方法
1.同步方法
/*
* 存钱
*/
synchronized public void setMoney() {
try {
Thread.sleep(3);//模拟网络延迟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.money=this.money+1;
}
2.同步块
synchronized (object){
同步语句
}