写点什么

【线程】,Java 自学宝典 pdf

用户头像
极客good
关注
发布于: 刚刚

多进程之间不能共享资源文件,而线程可以共享


线程更加轻量化


线程要依赖


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


进程


进程是操作系统资源分配的最小单位


线程是程序执行的最小单位


1.线程的创建方式


===========================================================================


1.1.通过实现 Thread 类然后重写 run 方法进行创建


public class ThreadDemo3 {


//重写一个类继承 Thread 类


static class MyThread extends Thread{


@Override


public void run() {


//这里面就可以写要执行的代码


System.out.println("我是新线程");


try {


//调用 sleep 方法让其休息 60 秒


Thread.sleep(60*1000);


} catch (InterruptedException e) {


e.printStackTrace();


}


}


}


public static void main(String[] args) {


MyThread myThread = new MyThread();


//创建一个线程之后都要调用 start 取执行


myThread.start();


}


}



1.2.通过 Runable 接口并且实现 run 方法进行创建


public class ThreadDemo3 {


static class MyThread2 implements Runnable{


@Override


public void run() {


System.out.println("我是线程 2");


}


}


public static void main(String[] args) {


Thread thread = new Thread(new MyThread2());


thread.start();


}


}


1.3.通过实现匿名 Runable 的方式实现


public static void main(String[] args) {


Thread thread = new Thread(new Runnable() {


@Override


public void run() {


System.out.println("我是线程 3");


}


});


thread.start();


}


1.4.通过 lambda 表达式进行实现


(推荐使用,但是只能在 JDK8+才支持)


public static void main(String[] args) {


Thread thread = new Thread(()->{


System.out.println("我是线程 4");


});


thread.start();


2.线程的执行效率


===========================================================================


对于同一个程序来说,使用单线程和多线程去执行效率是有很大差距的那么下面我距离说明


2.1.前提:要了解时间戳这个概念,也就是利用它来记录我们代码程序的执行时间,时间戳也就是在程序开始的时候记录一个时间,然后当程序完成之后在记录一个时间,然后让完成时间减去初始时间,那么就是程序的执行时间


未引入多线程之前,执行程序只能串行式执行,先引入 A,完了之后才能执行 B,完了之后才能执行 C……


通过多线程,我们可以并发式的执行 A B C


但是多个线程的执行顺序是操作系统底部的调度器实现的


例如:执行同一个程序,分别使用单线程和多线程来看看他的执行速度


public class ThreadDemo3 {


static long count = 10_0000_0000L;


public static void oneThread(){


//记录一个开始时间


long begin = System.currentTimeMillis();


int a = 0;


for (int i = 0; i < count; i++) {


a++;


}


int b = 0;


for (int i = 0; i < count; i++) {


b++;


}


//记录一个结束时间


long end = System.currentTimeMillis();


//打印所花费的时间


System.out.println("单线程需要花费的时间: "+(end-begin)+"ms");


}


public static void twoThread() throws InterruptedException {


long begin = System.currentTimeMillis();

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
【线程】,Java自学宝典pdf