多线程交叉执行两个循环打印

什么是多线程:

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。

原理

实现多线程是采用一种并发执行机制

并发:指两个或多个事件在同一时间段内发生。(举例:唐三藏,猪八戒,沙悟净被困火海,孙悟空分身术限号,只能一个一个救,在极短的时间救出八戒三人)

多线程的实现步骤(Thread类)

1.定义类继承Thread类
2.重写run方法,run方法中的代码就会按照多线程机制进行调用和执行
3.在mian方法中定义类的对象,调用start()方法启动线程,会自动调用run方法

代码:

public class Mythread1 extends Thread{
    @Override
     public void run(){
         for (int i=0;i<100;i++){
             System.out.println("执行听歌"+i);
         }
     }
}







public class Mythread2 extends Thread{
    @Override
    public void start(){
        for (int j=0;j<100;j++){
            System.out.println("执行游戏"+j);
        }
    }
}









public class Threadtext1 {
    public static void main(String[] args) {
        Mythread1 t1=new Mythread1();
        Mythread2 t2=new Mythread2();
        t1.start();
        t2.start();
 
    }
}

 Runnable接口实现类实现多线程的步骤(Runnable接口)

1.定义实现Runnable接口
2.重写run方法
3.在mian方法中实例化Runnable接口的实现类对象
4.定义两个线程Thread类的对象,把Runnable接口的实现对象传入构造方法中
5.线程类对象调用start方法,启动线程,自动执行Runnable接口的实现类中的run方法
 

代码:


public class MyRunnable1 implements Runnable{
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println("执行听歌"+i);
        }
    }
}








public class MyRunnable2 implements Runnable {
    @Override
    public void run() {
        for (int j=0;j<100;j++){
            System.out.println("执行游戏"+j);
        }
        }
    }






public class Threadtext2 {
    /**
     * Runnable接口实现类实现多线程的步骤:
     * 1.定义类实现Rdhnable接口:
     * 2.重写run方法;
     * 3.在main方法中实例化Runnable接口的实现类对象;
     * 4.定义两个线程Thread类的对象,把Runnable接口的实现对象传入构造方法中;
     * 10 5.线程类对象调用start方法,启动线程,自动执行Runnable接口的实现类中的run方法;
     */
    public static void main(String[] args) {
       MyRunnable1 r1=new MyRunnable1();
       MyRunnable2 r2=new MyRunnable2();
        //Runnable接口的实现实现多线程,必须借助Thread类才能实现
        Thread t1=new Thread(r1);
        Thread t2=new Thread(r2);
 
        t1.start();
        t2.start();
    }
}

 

以下是使用Java编写多线程稀疏矩阵乘法运算函数的示例代码: ```java public class SparseMatrixMultiplication { private static final int NUM_THREADS = 4; public static int[][] multiply(int[][] A, int[][] B) { int m = A.length; int n = B[0].length; int[][] result = new int[m][n]; List<Thread> threads = new ArrayList<>(); // Divide the rows of A into NUM_THREADS parts and create a thread for each part int chunkSize = m / NUM_THREADS; for (int i = 0; i < NUM_THREADS; i++) { int startRow = i * chunkSize; int endRow = i == NUM_THREADS - 1 ? m : (i + 1) * chunkSize; Thread thread = new Thread(new MultiplicationTask(A, B, result, startRow, endRow)); threads.add(thread); thread.start(); } // Wait for all threads to finish for (Thread thread : threads) { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } return result; } private static class MultiplicationTask implements Runnable { private int[][] A; private int[][] B; private int[][] result; private int startRow; private int endRow; public MultiplicationTask(int[][] A, int[][] B, int[][] result, int startRow, int endRow) { this.A = A; this.B = B; this.result = result; this.startRow = startRow; this.endRow = endRow; } @Override public void run() { int n = A[0].length; int p = B.length; for (int i = startRow; i < endRow; i++) { for (int k = 0; k < n; k++) { if (A[i][k] != 0) { for (int j = 0; j < p; j++) { if (B[k][j] != 0) { result[i][j] += A[i][k] * B[k][j]; } } } } } } } } ``` 在此示例代码中,我们定义了一个 `SparseMatrixMultiplication` 类,其中包含一个名为 `multiply` 的函数,它接受两个稀疏矩阵 `A` 和 `B` 作为输入,并返回它们的乘积矩阵。 在函数中,我们首先创建一个大小为 `NUM_THREADS` 的线程列表,并将矩阵 `A` 的行分成 `NUM_THREADS` 个部分,为每个部分创建一个线程。每个线程都执行名为 `MultiplicationTask` 的任务,该任务将计算矩阵 `A` 的一部分与矩阵 `B` 相乘,并将结果存储在乘积矩阵 `result` 中。 `MultiplicationTask` 任务实现了 `Runnable` 接口,它接受矩阵 `A`、矩阵 `B`、乘积矩阵 `result`、开始行和结束行作为输入,并计算 `A` 的一部分与 `B` 的乘积并将结果存储在 `result` 中。 在任务中,我们首先获取矩阵 `A` 的列数 `n` 和矩阵 `B` 的行数 `p`,然后在每个行 `i` 和列 `j` 上循环乘以 `A[i][k]` 和 `B[k][j]`,其中 `k` 表示矩阵 `A` 和矩阵 `B` 的交叉点。注意,我们只计算非零元素,因为稀疏矩阵中大多数元素都是零,因此计算零元素是浪费时间和资源的。 最后,我们等待所有线程完成,并返回乘积矩阵 `result`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值