笔记05-----Java多线程

学习目标:

初步掌握Java多线程


学习内容:

1.基础概念

	进程-----运行中的应用程序
	线程-----进程的一个元

2.举例

	QQ上和多人聊天

3.线程的实现

	3.1继承Thread
public class Thread2 extends Thread{
    @Override
    public void run() {
        for(int i=0;i<20;i++)
        {
            System.out.println(Thread.currentThread()+"jack"+i);
        }
    }
}

结果验证

public static void main(String[] args) {
        Thread2 t1 = new Thread2();
        Thread2 t2 = new Thread2();
        t1.start();
        t2.start();
    }

在这里插入图片描述

3.2实现Runable
public class Thread1 implements Runnable {
    @Override
    public void run() {
        for(int i=0;i<20;i++)
        {
            System.out.println(Thread.currentThread()+"Bob"+i);
        }
    }
}
public static void main(String[] args) {
        Thread1 t = new Thread1();
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);
        Thread t3 = new Thread(t);
        t1.start();
        t2.start();
        t3.start();
    }

并发验证
在这里插入图片描述

4.并发
/*
定义一个可以排序数组的线程类
*/
public class Thread3 extends Thread{
    int[] a;
    Thread3(int[] a){
        this.a=a;
    }
    @Override
    public void run() {
        Arrays.sort(a);
    }
}

进程实现一:

public static void main(String[] args) {
        int a[] = {0,3,1,56,23};
        int b[] = {67,34,1,12};
        int c[] = {2,34,12,67};
        Thread3 t1 = new Thread3(a);
        Thread3 t2 = new Thread3(b);
        Thread3 t3 = new Thread3(c);
        t1.start();
        t2.start();
        t3.start();
        //遍历数组
        for(int n:a)
        {
            System.out.print(" "+n);
        }
        System.out.println();
        for(int n:b)
        {
            System.out.print(" "+n);
        }
        System.out.println();
        for(int n:c)
        {
            System.out.print(" "+n);
        }
    }

结果
在这里插入图片描述
并未发生排序

进程实现二:

Thread.sleep(1000);

加入这句语句后就可以遍历完成排序后的数组

public static void main(String[] args) throws InterruptedException {
        int a[] = {0,3,1,56,23};
        int b[] = {67,34,1,12};
        int c[] = {2,34,12,67};
        Thread3 t1 = new Thread3(a);
        Thread3 t2 = new Thread3(b);
        Thread3 t3 = new Thread3(c);
        t1.start();
        t2.start();
        t3.start();
        //遍历数组
        Thread.sleep(1000);
        for(int n:a)
        {
            System.out.print(" "+n);
        }
        System.out.println();
        for(int n:b)
        {
            System.out.print(" "+n);
        }
        System.out.println();
        for(int n:c)
        {
            System.out.print(" "+n);
        }
    }

结果
在这里插入图片描述
4.线程同步----保证线程有序访问资源

synchronized (this){
            Arrays.sort(a);
        }

5.线程死锁----不恰当的使用线程同步
解决死锁-----尽量使用一个核心模块同步块

6.线程池—是一种线程托管机制,将对应的线程集中托管分配,从而减少创建和启动的线程时间,提高程序的执行速度


学习时间:

2021/1/21
9:00~12:00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值