进程
概念:
一个正在进行的程序
一个程序准备运行的的时候,系统会为其开辟一块内存
线程
概念:
一个执行路径
注意:
1.一个进程中自带一个线程,且这个线程为主线程(main)
2.一个进程中可以有多个线程,拥有多个线程的进程为多线程
多线程
概念:
一个进程中有多个线程 称为多线程
注意:
1.多线程在宏观上是同步执行的
2.在微观上是多个线程之间在争夺cpu的使用权
线程的组成
cup时间片:
一个线程抢夺cpu执行权后可以执行的时间
运行数据:
1.一个线程拥有一个独立的栈
2.多个线程共享一个堆内存
代码逻辑
线程的使用
创建:
方案一:
继承Thread 类,并重写run()方法
情况一:
主函数:
MyThread t1 = new MyThread();
Thread thread = new Thread(t1);
thread.start();//开启线程
class MyThread extends Thread{
public void run(){
}
}
情况二:
匿名内部类
Thread thread = new Thread(){
public void run(){
}
};
thread.start();
方案二:
实现Runnable 接口,并重写run()方法
情况一:
主函数:
MyThread mt = new MyThread();
Thread thread = new Thread(mt);
thread.start();
class MyThread implement Runnable{
public void run(){
}
}
情况二:
Thread thread = new Thread(new Runnable(){
\public void run(){
}
});
thread.start();
线程的启动
语法:
线程对象.start();
注意:
一个线程只能启动一次
线程的关闭
注意:
1.线程一旦开启后就不能被关闭,无法控制
2.线程执行完run()方法中的代码后,将进入等待销毁状态
名称
语法:
设置:
1.创建对象的时候设置
new Thread(线程名称);
new Thread(线程任务 , 线程名称);
2.使用线程对象调用setName()方法设置
对象名.setName(线程名称);
注意:
必须在使用线程之前设置线程名称
获取:
语法:
线程对象.getName();
如何获取当前线程对象
语法:
Thread thread = Thread.currentThread();
优先级
语法:
线程对象.setPriority(优先级);
注意:
优先级的取值范围:(1 ~ 10)
礼让
概念:
在线程抢夺资源的时候,礼让就是将此次抢夺成功的权限放弃,并且重新参与下次抢夺
语法;
线程对象.yield();
休眠
语法:
Thread.sleep(休眠时间 / 毫秒);
线程对象.sleep(休眠时间 / 毫秒);
注意:
1.单位是毫秒
2.有异常,.需要解决
3.线程在休眠的时候不会抢夺cpu的执行权
合并
语法:
线程对象.join();
注意:
在线程A的run()方法中调用线程B的此方法,表示将B线程中run()方法中没有执行的代码完全合并到A代码中
守护线程 与 前台线程
前台线程:
线程创建时默认就是前台线程
如果一个进程中有前台线程存活,那么该进程就不会被系统所回收
守护线程:
别名:后台进程
如果一个进程中的所有前台线程都被销毁了,即使进程中还有守护线程,那么该守护线程任然会被销毁
如何设置一个线程为守护线程:
语法:
线程对象.setDaemon(true);
注意:
必须在启动线程之前