JavaSE-多线程知识
1.线程、进程、程序的区别
- 程序是指令和数据的文件,被存储在磁盘或其它的数据存储设备中,也就是说程序是静态的代码。
- 进程是程序的一次执行过程,是系统运行程序的基本单位,程序是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
- 线程是比进程还要小的运行单位。一个进程最少要有一个线程。线程和进程最大的不同在于各进程基本上是独立的,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。而各线程则不一定,因为同类的多个线程共享进程的堆和方法区资源,所以会相互影响。
- 进程有独立性和互斥性
线程有抢占式资源共享特性
2.什么是并发和并行
- 并发:同一时间片内轮流交替执行
- 并行:同一时间片内同时执行
3.创建线程的两种方式【jdk1.5之前】
1.继承Thread类
class MyThread extends Thread{
@Override
public void run(){
System.out.println("继承Thread类创建线程");
}
}
public class Demo{
public static void main(String[] args){
new MyThread().start();
}
}
2.实现Runnable接口
class MyThread implements Runnable{
@Override
public void run(){
System.out.println("实现Runnable接口创建线程");
}
}
public class Demo{
public static void main(String[] args){
new Thread(new Runnable()).start();
}
}
3.匿名内部类
public class Demo{
public static void mian(String[] args){
new Thread(){
@Override
public void run(){
System.out.println("匿名内部类:继承Thread类创建线程");
}
}start();
new Thread(new Runnable(){
@Override
public void run(){
System.out.println("匿名内部类:实现Runnable接口创建线程");
}
}).start();
}
}
4.线程下面的方法
构造方法
Thread()分配一个新的Thread对象
Thread(Runnable target)分配一个新的Thread对象
Thread(Runnable target, String name)分配一个新的Thread对象,并起名字
线程方法
static Thread currentThread()返回对当前正在执行的线程对象的引用
String getName()返回此线程的名称
void setName()将此线程的名称更改为等于参数name
int getPriority()返回此线程的优先级
void setPriority()更改此线程的优先级。设置优先并不一定优先,只是增加了执行的概率。最小值是1,最大值是10,默认是5
static void sleep(long millis)使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性
start()启动当前线程;调用当前线程的run()方法
run()通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
yield():释放当前cpu的执行权
join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。
join()方法:join()在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
class Father implements Runnable {
@Ov