多线程学习

生产者

一.什么是多线程

多线程就是在一个程序中同时执行多个相互独立的运算过程,这些运算过程被称作为线程。

二.线程与进程

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程是进程中进行运算的最小单位。

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

资源分配给进程,同一进程的所有线程共享该进程的所有资源。

处理机分给线程,即真正在处理机上运行的是线程。

三.单进程和多进程

同一时间,如果CPU是单核,此时只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,所以会以为这些进程在同步执行。

多核CPU可以同一时间点有多个进程在执行。

四.继承Thread类

public class Threadtext1 extends Thread{

    @Override
    public void run() {
        System.out.println("121313131");
     try {
         Thread.sleep(100);
     }catch (Exception ef){}
    }

    public static void main(String[] args) {
        while (true){
        Threadtext1 th1=new Threadtext1();
        th1.run();}
    }
}

五.生产消费者模型

生产消费者模型就是利用队列将生产者与消费者两组数据之间相关联起来,通过将生产者里的数据传入公共队列里面以后,当消费者需要的时候会从公共队列中自己提取需要的数据。

例:

测试类:

package practice;

import java.util.ArrayList;

public class user {

    public static void main(String[] args) {
        ArrayList<String> quene= new ArrayList<>();
        producer pd=new producer(quene);
        pd.start();
        System.out.println("生产线程启动");
        customer ct=new customer(quene);
        ct.start();
        System.out.println("消费线程启动");
    }
}

 生产队列:

package practice;

import java.util.ArrayList;

public class producer extends Thread {
    public ArrayList<String> quene;

    public producer(ArrayList<String> quene) {
        this.quene = quene;
    }

    @Override
    public void run() {
        int id = 0;
        while (true) {
            if (this.quene.size() == 0) {
                id++;
                String msg = "模拟数据" + id;
                this.quene.add(msg);
                System.out.println("生产线程" + msg);
            }try {
                Thread.sleep(1000);
            }catch (Exception ef){}
        }

    }
}

 消费队列:

package practice;

import java.util.ArrayList;

public class customer extends Thread {
    public ArrayList<String> queue = null;

    public customer(ArrayList<String> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {

        while (true) {

            if (this.queue.size() > 0) {
                String msg = this.queue.remove(0);
                System.out.println("消费线程:" + msg);
            }try {
                Thread.sleep(1000);
            }catch (Exception ef){}
        }
    }
}

结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值