目录
多线程大致概念:
一个程序至少有一个进程,一个线程,就拿我们打开一个直播来说,我们在看的时候会看到主播,会听见声音,会看到弹幕,以及送的一些礼物特效,这些都是通过线程来实现的,一台电脑它能分出的线程越多,分析的速度越快,他的配置就足够好。
首先我们先了解以下在操作系统中进程和线程的区别:
进程: 每个进程都有一个独立的代码与数据空间,进程之间切换会有比较大的开销,一个进程包含1--n个线程
线程: 同一类线程共享一个代码和数据空间,每个线程都有一个独立的运行栈和程序技术器,线程切换开销较小
我们每次打开一个线程或进程就会激活一部分的cpu性能
同知每次关闭一个线程或进程就会释放一部分的cpu性能
线程的五大阶段:
线程和进程一样,都分为五个阶段:创建、就绪、运行、阻塞、终止。
多线程的实现:
首先是连接接口(Runnable):
public class test implements Runnable
它会给我生成一个run类:
@Override public void run() {}
我们可以在这里边进行需要进行的操作
test test = new test();//类的调用 Thread thread = new Thread(test);//线程的调用,在我们调用的方法中也可以设置线程名
我们需要通过类的调用去设置需要调用的线程方法
关于线程的操作与使用:
获取和设置线程名称:
thread.getName();//获取线程名字
thread.setName("ly");//设置线程名字
获取线程的优先级和设置线程的优先级:
thread.getPriority();//获取线程优先级返回的是一个int的数据类型 thread.setPriority();//设置线程优先级
线程优先级的设置有以下三种函数:
Thread.MAX_PRIORITY//最大 Thread.NORM_PRIORITY//中等 Thread.MIN_PRIORITY//最小
线程的运行:
thread.start();//运行 thread.run();//运行
run方法是直接通过我们的main方法来调用的,start是调用我们写的那个线程方法,两者速度并无太大差别
在我们写的线程方法中也可以调用线程名只是方法较为特殊:
Thread.currentThread().getName();//需要方法名为前缀且加上一个currentThread函数
线程的睡眠:
//设置延迟时间 try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); }//这里我们需要用try{}catch{}返回一下
代码实现如下:
public class test implements Runnable{
public static void main(String[] args) {
test test = new test();
Thread thread = new Thread(test,"波动拳");
thread.setPriority(Thread.NORM_PRIORITY);
thread.start();
}
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(Thread.currentThread().getName()+"第"+(i+1)+"发");
if (i==2){
System.out.println("开始为时5秒的充能");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i=-1;
}
}
}
}