javaSE多线程实现--简单应用

一、基础介绍:

任务: cpu根据系统去执行任务。任务就是计算机最小的执行单位。

cpu执行任务:

  第一种:同一时间执行一个任务,快速在多个任务间切换执行------------并发,单核cpu

  第二种:同一时间执行多个任务,多个处理器或者内核,分别执行不同的任务-----------并行,

 

线程: 一个任务就是一个线程

进程:通常就是一个程序。

 

二、Java程序中的多线程

 

三、实现方式

三种方式:继承Thread、实现Runnable 接口 、实现

 

1、继承Thread

代码示例:

复制代码
package cn.itheima.demo;

/**
 * @author lanpengbiao
 * @version 1.0
 * @Description Demo7 通过继承 Thread 创建多线程
 * @date Created in 2021-11-11 14:34
 * @since jdk1.7
 */
public class Demo7 extends Thread {
    private String myName;

    public Demo7(String name, String myName) {
        super(name);
        this.myName = myName;
    }

    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(myName+"=========="+i);
        }
    }
}
复制代码

 

测试代码:

    public static void testDemo7(){
        Demo7 demo7=new Demo7("thtead1","thtead1");
        Demo7 demo7_2=new Demo7("thtead2","thtead2");
        demo7.start();
        demo7_2.start();
    }

 

效果:

 

2、实现Runnable 接口

 代码示例:

 

复制代码
package cn.itheima.demo;

/**
 * @author lanpengbiao
 * @version 1.0
 * @Description Demo8  通过实现  Runnable 接口创建多线程
 * @date Created in 2021-11-11 14:55
 * @since jdk1.7
 */
public class Demo8 implements Runnable {
    private String myName;

    public Demo8(String myName) {
        this.myName = myName;
    }

    @Override
    public void run() {
        for(int i=0;i<10;i++){
            System.out.println(myName+"=========="+i);
        }
    }
}
复制代码

 

 

测试:

 

    public static void testDemo8(){
        Demo8 demo8_1 = new Demo8("runnable_1");
        Demo8 demo8_2 = new Demo8("runnable_2");

        new Thread(demo8_1).start();
        new Thread(demo8_2).start();
    }

 

效果:

 

 

3、使用实现Callable接口

示例:

 

复制代码
package cn.itheima.demo;

import java.util.concurrent.Callable;

/**
 * @author lanpengbiao
 * @version 1.0
 * @Description Demo9  通过使用Callable接口和FutureTask类实现多线程
 * @date Created in 2021-11-11 15:16
 * @since jdk1.7
 */
public class Demo9 implements Callable {
    private String myName;

    public Demo9(String myName) {
        this.myName = myName;
    }

    @Override
    public Object call() throws Exception {
        for(int i=0;i<10;i++){
            System.out.println(myName+"=========="+i);
        }
        return myName;
    }
}
复制代码

 

 

测试:

 

复制代码
    public static void testDemo9(){
        Demo9 demo9_1 = new Demo9("Callable1");
        Demo9 demo9_2 = new Demo9("Callable2");
        FutureTask<String> ft1 = new FutureTask<>(demo9_1);
        FutureTask<String> ft2 = new FutureTask<>(demo9_2);

        new Thread(ft1,"有返回值的线程:").start();
        new Thread(ft2,"有返回值的线程:").start();

        try {
            //返回值
            System.out.println(ft1.get());
            System.out.println(ft2.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }


    }
复制代码

 

 

效果:

 

posted @   hehehenhen  阅读(28)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示