java多线程的使用

实现多线程的方式最常用的有两种,一种是实现runnable接口,另一种是继承thread类。
这里讲一下第一种方式来实现多线程

要想用多线程实现高并发则必须要有一个主线程。
具体步骤如下
1、新建主线程类 MainProcess
在主线程中有一个与子线程进行通信的同步锁,代码中的synchronize修饰符就是为了保证被该修饰符修饰的代码只会被UI个线程执行,在执行过程中其它的线程都会处于等待状态,主线程在产生完子线程之后就进入了等待状态,等待子线程的执行

public class MainProcess {
      static Object lock = new Object();//同步锁

    public static void main(String[] args) {
        int cuindex=0;
        Integer allNum=30;
        int maxSize = 10;
        List<String> list = null;
        list= new ArrayList<String>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        list.add("钱七");
        list.add("周八");
        list.add("吴九");
        list.add("郑旺");
        list.add("孙十");
        list.add("罗十一");
        list.add("袁十二");
        list.add("老子");
        list.add("庄子");
        list.add("悟空");
        list.add("八戒");
        list.add("沙僧");

        SubProcess sp = new SubProcess(lock, list, maxSize, allNum,cuindex);
     //产生子线程
        for(int i=0;i<maxSize;i++){

        Thread sth = new Thread(sp);
        sth.start();
        }
        //主线程等待
        synchronized ( lock) {
         try {
            lock.wait(90000);
            cuindex = cuindex+maxSize;
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        }   
    }




}

2、新建子线程类 SubProcess
子线程将实现ruannable接口,子线程中定义对象锁,来源于主线程,当当前已执行完的线程数等于最大线程数后唤醒主线程。


public class SubProcess implements  Runnable{

    Object lock = null;
    List list = null;
    Integer allNum=null;
    int maxSize;
    int currentListIndex;
    int currentThreadSNum;//当前开启的线程数
    int currentThreadFNum;//当前完成的线程数
    public SubProcess(Object lock,List list,int maxSize,Integer allNum,int currentListIndex){
        this.lock=lock;
        this.list=list;
        this.maxSize=maxSize;
        this.allNum=allNum;
        this.currentListIndex=currentListIndex;
    }

    @Override
    public void run() {
        int localThread=0;//当前线程编号
        synchronized(this.lock){
            currentThreadSNum=currentThreadSNum+1;
            localThread=currentThreadSNum;
        }
        synchronized(this.lock){
            currentThreadFNum=currentThreadFNum+1;
            System.out.println(list.get((currentListIndex-1)+localThread)+"减一");
            allNum=allNum-1;
            System.out.println("还剩"+allNum+"");
         if(currentThreadFNum==maxSize){
             this.lock.notify();//唤醒主线程
         }
        }


    }




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值