线程、多线程、进程、线程生命周期、线程的五种状态、同步、线程间通信、创建线程的俩种方式
线程、多线程、进程、线程生命周期、线程的五种状态、同步、线程间通信、创建线程的俩种方式
进程概念:
进程是指可执行程序存放在计算机存储器的一个指令序列,它是一个动态执行的过程
线程:
线程是比进程还要小的运行单位,一个进程包含多个线程,线程是一个子程序
时间片轮转实现多任务同时进行
线程的创建:
1.创建一个Thread类,或者一个Thread子类的对象
2.创建一个实现Runnable接口的类的对象
Thread类
Thread是一个线程类,位于java.lang包下
Thread类的常用方法:
Runnable接口
1.只有一个方法run();
2.Runnable是Java中用以实现线程的接口
3.任何实现线程功能的类都必须实现该接口
一个java文件不能有多个文件
创建线程:
package com.my.thread;
class MyThread extends Thread{
public void run(){
System.out.println(getName()+"线程正在进行");
}
}
public class ThreadTest{
public static void main(String[] args){
MyThread my=new MyThread();
//启动线程一个线程只能启动一次
my.start();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
线程是随机获得cpu的使用权
实现Runnable接口是因为:
1.java不支持多继承,接口可以同时实现多个接口
2.不打算算重写Thread类的其他方法
package com.my.runnable;
class MyRunnable implements Runnable{
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+"正在运行");
}
}
public class ThreadTest{
public static void main(String[] args){
//多个线程可共享内存资源
MyRunnable mr=new MyRunnable();
Thread t=new Tread(mr);
//MyRunnable mr1=new MyRunnable();
Thread t1=new Tread(mr);
t.start();
t1.start();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
线程的五个状态:
新建(New)
可运行(Runnable)
正在运行(Running)
阻塞(Blocked)
终止(Dead)
线程的生命周期:
sleep方法应用:
Thread类的方法
public static void sleep(long millis)
作用:在指定的毫秒数内让正在执行的线程休眠(暂停执行)
通过 Thread.sleep(1000); 来调用
join方法应用
Thread类的方法:
public final void join()
作用:调用它会优先执行,等其执行完成后才会有其他线程执行操作是一种抢占资源的方式
线程对象.join();
2.public final void join()
作用:等待该线程终止的最长时间为millis毫秒。
1
2
有参数话,不管当前线程是否执行完,在时间到了之后其他线程就可以执行,无参数的话是只有该线程执行完后其他线程才可以执行。
线程优先级:
1.java为线程提供了10个优先级
优先级可以用整数1-10表示,超过范围会抛出异常。主线程默认优先级为5
2.优先级常量
-MAX_PRIORITY:线程的最高优先级10
-MIN_PRIORITY:线程的最低优先级1
-NORM_PRIORITY:线程的默认优先级5
线程优先级的相关方法:
public int getPriority() //获取线程优先级的方法
public void setPriority(int newPriority)//设置线程优先级的方法
线程优先级也不是绝对的,会和cpu、操作系统以及开启顺序也有关系
多线程运行问题:
1.各个线程是通过竞争cpu时间而获得运行机会
2.各线程什么时候得到cpu时间,占用多久,是不可预测的
3.线程被暂停是不确定的
同步:
synchronized关键字用在:
成员方法、静态方法、语句块
保证线程互斥(线程同步),使线程在执行的时候不被打断。保证完整性。
线程间通信:
wait()方法:中断方法的执行,使线程等待
notify():唤醒处于等待的某一个线程,使其结束等待
notifyAll()方法:唤醒所有处于等待的线程,是他们结束等待。
总结创建线程的两种方式:
使用实现Runnable接口创建线程较好,在Java中不支持多继承,实现接口也有利于数据共享
————————————————
版权声明:本文为CSDN博主「IT精神小伙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhihu000/article/details/114753624