栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础学习 ----多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础学习 ----多线程

//1.创建一个继承于Thread类的子类
    class MyThread extends Thread{
        //2.重写Thread类的run()

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i%2==0){
                System.out.println(i+Thread.currentThread().getName());
            }

        }
    }
}

public class ThreadTest {
    public static void main( String[] args) {
        //     3.创建Thread类的子类的对象
        MyThread T1 = new MyThread();
        //4.通过此对象通用start()1启动当前线程2调用当前线程的run()
        //问题一:我们不能通过直接调用run()的方式启动线程。
        T1.start();
        //问题二:在启动一个线程,遍历100以内的偶数。不可以还让已经start()的线程去执行。
        // 会报异常 IllegalThreadStateException
        //我们重新创建一个线程的对象
        MyThread T2 = new MyThread();
        T2.start();

        //如下操作仍然是在主线程中执行的
        for (int i = 0; i < 100; i++) {
            if (i%2!=0){
                System.out.println(i+Thread.currentThread().getName());
            }

        }

    }
}
//1.创建一个实现了Runnable接口的类
class MTread implements Runnable{
    //实现类去实现Runnable中的抽象方法run()
    @Override
    public void run() {
        for (int i = 0; i <100 ; i++) {
            if (i%2==0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }

    }
}
public class ThreadTest2 {
    public static void main(String[] args) {
        //3.创建实现类的对象
        MTread mTread=new MTread();
        //4.将此对象作为参数传递到Thread类的构造器中,构建Thread类的对象
        Thread t1 = new Thread(mTread);
        t1.setName("线程一");
        //5.通过Thread类的对象调用start()1.启动线程 2.调用当前线程的run()-->调用了Runnable类型的target的run()
        t1.start();
        //再开启一个线程,遍历100以内的偶数
        Thread t2=new Thread(mTread);
        t2.start();

    }
}


class HelloThread extends Thread{
    public HelloThread( String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i%2==0){
//                try {
//                    sleep(1);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
                System.out.println(i+Thread.currentThread().getName());
            }
            if (i%20==0){
                this.yield();
            }

        }
    }
}


public class ThreadMethodTest{
    public static void main(String[] args) {
        HelloThread h1=new HelloThread("THREAD:1");
        // h1.setName("线程一");
        // h1.start();
        //设置分线程的优先级
        h1.setPriority(Thread.MAX_PRIORITY);
        h1.start();
        //给主线程命名
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0; i < 100; i++) {
            if (i%2 == 0){
                System.out.println(i+Thread.currentThread().getName());
            }
//            if (i==20){
//                try {
//                    h1.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }

        }
        System.out.println(h1.isAlive());
    }
    }

练习

方式一创建多线程

public class WindowsTest {
    public static void main(String[] args) {

        Window t1=new Window();
        Window t2=new Window();
        Window t3=new Window();
        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");
        t1.start();
        t2.start();
        t3.start();
    }



}
class Window extends Thread{
    private static int ticket=100;

    @Override
    public void run() {
        while (true){
            if (ticket>0){
                System.out.println(getName()+"卖票,票号为"+ticket);
                ticket--;
            }else{
                break;}

        }

    }
}
//方式二创建多线程
//例子:创建三个窗口卖票,总票数为100张
class Window1 implements Runnable {

    private int ticket = 100;

    @Override
    public void run() {
        while (true) {
            if (ticket > 0) {
                System.out.println(Thread.currentThread().getName() + "卖票,票号为" + ticket);
                ticket--;
            } else {
                break;
            }
        }
    }
}
public  class WindowTest1 {
    public static void main(String[] args) {
        Window1 w=new Window1();

        Thread t1=new Thread(w);
        Thread t2=new Thread(w);
        Thread t3=new Thread(w);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();

    }
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号