java基础——多线程

一:Thread线程类
注:任何一个Thread实例调用start方法启动运行一个线程
注:run是线程启动后自动执行的业务方法
常用构造器:
    public Thread()
    public Thread(Runnable target)
    public Thread(Runnable target,String name)
Thread常用方法:
    public void start()启动线程
    public void run()执行线程的核心业务功能
    public static void sleep(long millis)throws InterruptedException
    public void interrupt()中断当前状态
    public final void join()throws InterruptedException
    线程联合,当前线程独占CPU资源
    public boolean isInterrupted()测试线程是否已经中断
    public final boolean isAlive()测试线程是否处于活动状态
    public static void yield()暂停当前线程,执行其他线程
    public final String getName()获取线程名称
    public final int getPriority()获取线程的优先级
    public final void setName(String name)设置线程名称
    public final void setPriority(int newPriority)设置线程的优先级

二:Runnable线程接口
作用:提供一个唯一的run方法,可以让多个Thread的实例共享此接口的run方法,达到一个线程间通信更加方便。

三:interrupt方法


四:线程同步
关键字:synchronized
    同步代码块
    对象同步锁
    方法同步锁(互斥方法)

 

interrrupt方法的使用

public class Classroom implements Runnable {
    
    private Thread student;//学生线程
    private Thread teacher;//老师线程
    
    public Classroom(){
            student=new Thread(this,"小迷糊");
            teacher=new Thread(this,"大教授");
            student.setPriority(Thread.MAX_PRIORITY);
            student.start();
            teacher.start();
            
    }

    @Override
    public void run() {
        
        Thread current=Thread.currentThread();
        if(current==student){
            System.out.println(current.getName()+"正在听课");
            System.out.println(current.getName()+"学生在睡觉");
            try {
                Thread.sleep(1000*60*60);
            } catch (InterruptedException e) {
                System.out.println("被老师叫醒了!");
                e.printStackTrace();
            }
        }
        if(current==teacher){
            System.out.println(current.getName()+"叫醒学生听课");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            student.interrupt();//中断学生线程的休眠状态
        }
    }

}

 

同步代码块

public class SynCode implements Runnable {

    @Override
    public void run() {
        synchronized (this) {
            Thread current=Thread.currentThread();
            for(int i=1;i<=5;i++){
                System.out.println("当前执行的同步代码块是:"+current.getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
        }
    }

}

 

对象同步锁

public class Dog {
    private String Name;

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}

public class SynObject implements Runnable {
    
    private Dog dog;
    
    public SynObject(){
        if(dog == null){
            dog=new Dog();
        }
    }

    @Override
    public void run() {
        synchronized (dog) {
            Thread current=Thread.currentThread();
            for(int i=1;i<=10;i++){
                System.out.println("哪个线程在修改狗的名字"+current.getName());
                dog.setName("柯基");
                System.out.println(dog.getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
        }

    }

}

 

方法同步锁

public class SynMethod implements Runnable {

    private double money=10000;
    @Override
    public void run() {
        doMoney();
    }
    public synchronized void doMoney(){
        Thread t=Thread.currentThread();
        for(int i=0;i<10;i++){
        if(t.getName().equals("会计")){
            money+=100;
        }
        if(t.getName().equals("出纳")){
            money-=10;
        }
        System.out.println("当前的账户金额是:"+money);
        }
    }

}

 

public class Test {

    public static void main(String[] args) {
         Classroom classroom=new Classroom();


        SynCode syncode=new SynCode();
        Thread t0=new Thread(syncode,"张栩华");
        Thread t2=new Thread(syncode,"任森");
        Thread t3=new Thread(syncode,"涛妹");
        t3.setPriority(Thread.MAX_PRIORITY);
        t0.start();
        t2.start();
        t3.start();
        
        SynObject syn=new SynObject();
        Thread t00=new Thread(syn,"张栩华");
       Thread t22=new Thread(syn,"涛妹");
        Thread t33=new Thread(syn,"人僧");
        t22.setPriority(Thread.MIN_PRIORITY);
        t00.start();
        t22.start();
        t33.start();
        
        SynMethod s=new SynMethod();
        Thread t0=new Thread(s,"会计");
        Thread t1=new Thread(s,"出纳");
        t0.start();
        t1.start();
    
        
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值