当前位置: 首页 > news >正文

多线程( Thread)

 线程:是一个程序内部的一条执行流程。

多线程:是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。

创建线程:

多线程的创建方式之一:继承Thread类

1.定义一个子类MyThread继承线程类java.lang.Threaf,重写run()方法

2.创建MyTread类的对象

3.调用线程对象的start()方法启动线程(启动后还是执行run()方法的)

优点:编码简单

缺点:线程类已经继承了Thread,无法继承其他类,不利于功能的扩展。

如下就是一个多线程。

创建线程的注意事项:

1.启动线程必须是调用start方法,不是调用run方法。

直接调run方法会当成普通方法执行,此时相当于还是单线程执行

只有调用start方法才是启动一个新的线程执行。

2.不要把主线程任务放在启动子线程之前。

public class Test {//main方法本身 是线程,main方法就是一个线程,main方法启动了线程,main方法就是主线程public static void main(String[] args) {//创建线程的创建方式一:继承Thread类,重写run方法,调用start方法启动线程// 创建线程对象MyThread myThread = new MyThread();// 启动线程myThread.start();for (int i = 0; i < 10; i++) {System.out.println("主线程:" + i);}}
}
// 定义一个类继承Thread类,成为线程类class MyThread extends Thread{// 重写Thread类的run方法@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("线程1:" + i);}}
}

多线程的创建方法二:实现Runnable接口

public class ThreadDemo2 {public static void main(String[] args) {//sRunnable runnable=new MyRunnable();Thread t = new Thread(runnable);t.start();for (int i = 0; i < 10; i++) {System.out.println("主线程任务正在执行"+i);}}
}
//定义一个线程任务实现Runnable接口
class MyRunnable implements Runnable{@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("子线程任务正在执行"+i);}}
}

匿名内部类写法

public static void main(String[] args) {//sRunnable runnable=new Runnable(){public void run() {for (int i = 0; i < 10; i++) {System.out.println("子线程任务正在执行"+i);}}};Thread t = new Thread(runnable);t.start();for (int i = 0; i < 10; i++) {System.out.println("主线程任务正在执行"+i);}}

线程的创建方式三:实现Callable接口、FuntureTask类类实现

前两种创建方式存在问题:重写的run方法不能直接返回数据 结果。

JDK5.0提供了Callable接口和FutureTask类来实现(多线程第三种创建方式)

优点:可以返回线程执行完毕后的结果。

 

  

 public static void main(String[] args) {Callable<Integer> myCallable = new MyCallable(15);FutureTask<Integer> task = new FutureTask<>(myCallable);Thread t = new Thread(task);t.start();Callable<Integer> myCallable1= new MyCallable(20);FutureTask<Integer> task1 = new FutureTask<>(myCallable1);Thread t1 = new Thread(task1);t1.start();try {int sum = task.get();System.out.println("子线程1计算结果为:"+sum);} catch (Exception e) {e.printStackTrace();}try {int sum = task1.get();System.out.println("子线程2计算结果为:"+sum);} catch (Exception e) {e.printStackTrace();}for (int i = 0; i < 10; i++) {System.out.println("主线程任务正在执行"+i);}}
}
class MyCallable implements Callable<Integer> {int j;public MyCallable(int j) {this.j = j;}@Overridepublic Integer call() throws Exception {for (int i = 0; i < 10; i++) {j+=i;}return j;}

三种线程的创建方式不同点

线程的常见方法

Thread的常用方法

   

public class Threadmain {public static void main(String[] args) {//创建两个线程Thread t1=new MyThread1();Thread t2=new MyThread1();t1.start();t2.start();System.out.println(t1.getName());System.out.println(t2.getName());t1.setName("线程1");t2.setName("线程2");System.out.println(t1.getName());System.out.println(t2.getName());try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}try{t1.join();}catch(InterruptedException e){e.printStackTrace();}}
}
class MyThread1 extends Thread{public void run(){for (int i = 0; i < 10; i++) {System.out.println(Thread.currentThread().getName()+"正在运行"+i);}}
}

 

相关文章:

  • 【深度学习】 19. 生成模型:Diffusion Models
  • 81、使用DTU控制水下灯光控制
  • ZLG ZCANPro,ECU刷新,bug分享
  • 刚出炉热乎的。UniApp X 封装 uni.request
  • 鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp
  • 一键净化Excel数据:高性能Python脚本实现多核并行清理
  • uni-app学习笔记二十--pages.json页面路由pages设置
  • 五、单元测试-概述入门
  • 【Python Cookbook】文件与 IO(二)
  • Langchaine4j 流式输出 (6)
  • Vim 支持多种编程语言编辑器
  • NLP学习路线图(十五):TF-IDF(词频-逆文档频率)
  • Python Django完整教程与代码示例
  • 计算机网络(5)——数据链路层
  • 超标量处理器设计6-指令解码
  • Chorme如何对于youtube视频进行画中画背景播放?
  • wordpress免费主题网站
  • 利用 Python 爬虫获取淘宝商品详情
  • Java数据结构——八大排序
  • 04.MySQL数据类型详解
  • 有哪些网站可以做店面设计/app推广公司
  • 做公益的网站有哪些/网络推广电话
  • 网站策划书的撰写/网站搜索引擎优化的步骤
  • 北太平庄做网站公司/百度站长平台官网
  • 海口网站制作公司/百度seo排名优化联系方式
  • 买域名去哪个网站好/seo关键词排名优化软件怎么选