Java多线程

MyThread.java

import java.util.*;
public class MyThread extends Thread {
    int pauseTime;
    public MyThread(int hTime,String name){
        super(name);
        pauseTime=hTime;
    }
    public void run(){  //覆盖Thread类中的run方法
        for (int i=1;i<5;i++){
            try{
                System.out.println(this.getName()+":"+new Date(System.currentTimeMillis()));
                Thread.sleep(pauseTime);
            } catch (Exception e) {
                System.out.println("线程错误"+e);
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("1,当前活动线程数量为"+Thread.activeCount());
        MyThread myThread1=new MyThread(2000,"线程A");
        myThread1.start();
        System.out.println("2,当前活动线程数量为"+Thread.activeCount());
        MyThread myThread2=new MyThread(2000,"线程B");
        myThread1.start();
        System.out.println("3,当前活动线程数量为"+Thread.activeCount());
        System.out.println("线程myThread1的名字为"+myThread1.getName());
        System.out.println("线程myThread2的名字为"+myThread2.getName());
        myThread1.setName("线程1");
        System.out.println("线程myThread1的名字改为:"+myThread1.getName());
    }
}

要重写Thread类中的run方法。

MyRunThread.java

import java.util.Date;

class MyRunThread implements Runnable{
    int pauseTime;
    String name;
    public MyRunThread(int hTime,String name){
        pauseTime=hTime;
        this.name=name;
    }
    public void run(){
        for (int i=0;i<5;i++){
            try {
                System.out.println(name+":"+new Date(System.currentTimeMillis()));
                Thread.sleep(pauseTime);
            }catch (Exception e){
                System.out.println("线程错误"+e);
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("1,当前活动线程数量为"+Thread.activeCount());
        MyRunThread m1=new MyRunThread(2000,"线程A");
        Thread myThread1=new Thread(m1,"线程A");
        myThread1.start();
        System.out.println("2,当前活动线程数量为"+Thread.activeCount());
        MyRunThread m2=new MyRunThread(2000,"线程B");
        Thread myThread2=new Thread(m2,"线程B");
        myThread2.start();
        System.out.println("3,当前活动线程数量为"+Thread.activeCount());
        System.out.println("线程myThread1的名字为"+myThread1.getName());
        System.out.println("线程myThread2的名字为"+myThread2.getName());
        myThread1.setName("线程1");
        m1.name=myThread1.getName();
        System.out.println("线程myThread1的名字改为:"+myThread1.getName());
    }

}

需要实现Runnable接口中的run方法。

同步方法:

在方法定义时,在方法名前添加synchronized关键字。

public class MediRegister implements Runnable{
    int number=1;
    private int maxnum=40;
    public void setMaxnum(int max){
        maxnum=max;
    }
    public int getMaxnum(){
        return maxnum;
    }
    @Override
    public synchronized  void run() {//线程同步
        try {
            if (number<=maxnum){
                System.out.println(Thread.currentThread().getName()+"您挂号成功,号码是第"+number+"位");
                Thread.sleep((int)(Math.random()*1000));
                number++;
            }else {
                System.out.println(Thread.currentThread().getName()+",今天挂号已满,不能挂号");
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    public static void main(String[] args) {
        MediRegister theReg=new MediRegister();
        theReg.setMaxnum(2);
        Thread myRegister1=new Thread(theReg,"Mary");
        Thread myRegister2=new Thread(theReg,"Lily");
        Thread myRegister3=new Thread(theReg,"Tom");
        myRegister1.start();
        myRegister2.start();
        myRegister3.start();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值