java练习多线程

Posted 跳动de手指

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java练习多线程相关的知识,希望对你有一定的参考价值。

1、创建多线程方式继承Thread类

class ThreadDemo1{
    public static void main(String args[]){
        Demo1 d1 = new Demo1();
        d1.start();
        Demo1 d2 = new Demo1();
        d2.start();
    }
}
class Demo1 extends Thread{
    public void run(){
        show();
    }
    public void show(){
        while(true){
            try{Thread.sleep(3000);
            }catch(InterruptedException e){
                
            }
            System.out.println("ол╣Щ"+Thread.currentThread().getName());
        }
    }
}

2、实现多线程第二种方式Runnable接口

class ThreadDemo2{
    public static void main(String[]args){
        Demo d1 = new Demo();
        Thread t1 = new Thread(d1);
        Thread t2 = new Thread(d1);
        Thread t3 = new Thread(d1);
        Thread t4 = new Thread(d1);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class Demo implements Runnable{
    private int sum;
    public void show(){
        for(int x=0;x<20;x++){
            synchronized(this){
                    sum+=100;
                    System.out.println(Thread.currentThread().getName()+"银行金库实时金额:"+sum);
                }
            }
    }
    public void run(){
        show();
    }
}

3、多线程中的同步代码块、同步函数、静态同步函数需要注意的事项

当函数名用static修饰时,同步锁不能用this,static函数的锁使用对象.getClass()获取的字节码文件或者类名.class获取;

class ThreadDemo3{
    public static void main(String[]args){
        Demo d1= new Demo();
        Thread t1 = new Thread(d1);
        Thread t2 = new Thread(d1);
        Thread t3 = new Thread(d1);
        Thread t4 = new Thread(d1);
        t1.start();
        t2.start();
        try{Thread.sleep(10);}catch(InterruptedException e){}
        Demo.flag=false;
        t3.start();
        t4.start();
    }
}
/*
new Thread(d1);任务封装后在Thread类里面的传递过程
class Thread1 implements Runnable{
    Runnable r1;
    Thread1(Runnable r1){
        this.r1=r1;
    }
    public void run(){
        if(r1!=null)
            r1.run();
    }
    public void start(){
        run();
    }
}
*/
class Demo implements Runnable{
    public static boolean flag=true;
    private static int num=300;
    public void run(){
        if(flag){
            while(true)
                method();
        }else{
            synchronized(Demo.class){
                while(true)
                    if(num>0){
                        try{Thread.sleep(30);}catch(InterruptedException e){}
                        System.out.println("同步代码块售票口:"+Thread.currentThread().getName()+"已售出万达电影院门票号:"+num--);    
                    }
            }
        }            
    }
    public synchronized static void method(){
        if(num>0){
                try{Thread.sleep(30);}catch(InterruptedException e){}
                System.out.println("同步函数售票口:"+Thread.currentThread().getName()+"已售出万达电影院门票号:"+num--);    
        }
    }
}

 

以上是关于java练习多线程的主要内容,如果未能解决你的问题,请参考以下文章

java练习多线程

java多线程练习题 类

java 基础--多线程基础练习

java--多线程习题练习

Java多线程练习去那个城市

多线程的练习代码 01