多线程技术

1、 多线程的创建方式

一、继承Thread类

public class MyThread extends Thread{
    @Override
    public void run() {

        for (int i = 0; i < 5; i++) {
            System.out.println("子线程MyThread"+i);
        }
    }
}


public class ThreadText1 {
    public static void main(String[] args) {
        Thread t = new MyThread();

        t.start();

        for (int i = 0; i < 5; i++) {
            System.out.println("主线程main"+i);
        }


    }
}

二、实现Runnable接口

前两种线程仓创建方式配存在的一个问题
假如线程执行完毕后有一些数据需要返回,他们重写的run方法均不能直接返回结果。

 三、利用Callable接口,FutureTask类,来实现

2、Thread提供的方法

 什么是线程安全问题?
●多个线程,同时操作同一个共享资源的时候,可能会出现业务安全问题。

3.线程同步

一、同步代码块

 锁对象的使用规范
建议使用共享资源作为锁对象,对于实例方法建议使用this作为锁对象。
对于静态方法建议使用字节码(类名.class)对象作为锁对象。

二、方法锁

三、Lock锁

●lock锁是Jdk5开始提供的一个新的锁定操作,通过它可以创建出锁对象进行加锁和解锁,更灵活、更方便、更强大。
Lock是接口,不能直接实例化,可以采用它的实现类ReentrantLock来构建Lock锁对象。

4.线程通信

什么是线程通信?
当多个线程共同操作共享的资源时,线程间通过某种方式互相告知自己的状态,以相互协调,并避免无效的资源争夺。

线程通信的常见模型(生产者与消费者模型)
●生产者线程负责生产数据
●消费者线程负责消费生产者生产的数据。
●注意:生产者生产完数据应该等待自己,通知消费者消费;消费者消费完数据也应该等待自己,再通知生产者生产!

5.线程池

什么是线程池?
线程池就是一个可以复用线程的技术。

不使用线程池的问题
用户每发起一个请求,后台就需要创建一个新线程来处理,下次新任务来了肯定又要创建新线程处理的,而创建新线程的开销是很大的,并且请求过多时,肯定会产生大量的线程出来,这样会严重影响系统的性能。

Executors工具类

并发

 并行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值