Java之多线程入门
2026/7/24 18:42:51 网站建设 项目流程

并发和并行

并行:在同一时刻,有多个任务在多个CPU上同时运行

并发:在同一时刻,有多个任务在单个CPU上交替运行

进程和线程

进程:在多任务操作系统中,每个独立执行的程序,也就是操作系统中正在运行的应用程序

线程:程序运行的基本执行单元,就是应用程序中做的事情

什么是多线程?

是指从软件或者硬件上实现多个线程并发执行的技术

具有多线程能力的计算机因有硬件支持而能够在同一时刻执行多个线程,提升性能

怎么实现多线程?

1.继承Thread类

用到方法:

public void run() :线程执行任务的方法,是线程启动后第一个执行的方法

public void start() :启动线程的方法,线程对象调用该方法后,Java虚拟机就会自动调用此线程的run方法

步骤:

  1. 创建一个子类,继承Thread类 (创建的子类:也是线程类)

  2. 在子类中,编写让线程帮助完成的任务(任务代码)

    重写Thread类中的run方法(线程任务)

  3. 启动线程

弊端:类只能单一继承
publicclass子类extendsFather{}//像这样的类就不能再写Thread类了
//多线程开发//继承Thread类(当前类为线程类)publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("新的线程开始执行:");for(inti=100;i<200;i++){System.out.println("新线程"+i);}}}publicclassThreadDemo{publicstaticvoidmain(String[]args){System.out.println("进入到main方法中执行代码...");//创建一个线程对象MyThreadmyThread=newMyThread();myThread.start();//启动线程:代码底层自动调用run方法//main方法中的代码for(inti=0;i<=1000;i++){System.out.println(i);}}}

2.实现Runnable接口

使用构造方法:

public Thread(Runnable target)

public Thread(Runnalbe target , String name)

步骤:

  1. 创建一个子类, 实现Runnable接口

  2. 在子类中,重写Runnable接口中的方法:run (线程任务方法)

  3. 创建Thread类对象, 并把实现了Runnable接口的子类对象,作为参数传递给Thread类对象 new Thread( Runnable类型的对象 )

  4. 启动线程

//创建一个子类:线程任务类 实现Runnable接口publicclassMyTaskimplementsRunnable{//线程任务功能@Overridepublicvoidrun(){System.out.println("新的线程开始了");for(inti=100;i<200;i++){System.out.println("新线程"+i);}}}publicclassThreadDemo2{publicstaticvoidmain(String[]args){System.out.println("进入main方法中开始执行");//创建线程任务对象MyTaskmt=newMyTask();//创建线程类对象,并指定要执行的任务Threadt=newThread(mt);//启动线程t.start();//底层代码会自动调用run方法for(inti=0;i<1000;i++){System.out.println(i);}}}

//线程任务 : Runnable接口实现类

//线程功能 : Thread类

推荐使用Runnable接口的方式,好处:解耦

接口的作用:

  1. 制定规则

  2. 可以降低耦合 (耦合:程序之间紧密连接的程度) //程序都是要求低耦合

线程类常用功能

StringgetName():返回此线程的名称voidsetName(Stringname):将此线程的名称更改为等于参数的name//通过构造方法也可以设置线程名称publicstaticThreadcurrentThread():返回当前正在执行的线程对象的引用publicstaticvoidsleep(longtime):让线程休眠指定的时间,单位为毫秒publicvoidjoin():具备阻塞作用,等待这个线程死亡,才会执行其他线程
publicclassThreadTaskimplementsRunnable{@Overridepublicvoidrun(){System.out.println("新线程开始执行:");//获取当前线程对象Threadthread=Thread.currentThread();//获取当前线程名称Stringname=thread.getName();for(inti=100;i<200;i++){System.out.println(name+":"+i);}}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("hello");//链式写法newThread(newThreadTask()).start();//Thread-0:193//修改线程名字// new Thread(new ThreadTask(), "hello").start();//hello:191//让当前线程休息500毫秒try{Thread.sleep(500);//会报异常,我们用捕获处理}catch(InterruptedExceptione){thrownewRuntimeException(e);}for(inti=0;i<1000;i++){System.out.println(i);}}}
publicclassThreadTaskimplementsRunnable{@Overridepublicvoidrun(){//让当前线程进入到阻塞状态(暂停了)要直到其他线程执行完才会执行,但是很遗憾,main方法中并没有给它提示,所有下面的代码不会被执行try{Thread.currentThread().join();}catch(InterruptedExceptione){thrownewRuntimeException(e);}System.out.println("新线程开始执行:");//获取当前线程对象Threadthread=Thread.currentThread();//获取当前线程名称Stringname=thread.getName();for(inti=100;i<200;i++){System.out.println(name+":"+i);}}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("hello");//链式写法newThread(newThreadTask()).start();//Thread-0:193//修改线程名字// new Thread(new ThreadTask(), "hello").start();//hello:191for(inti=0;i<1000;i++){System.out.println(i);}}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询