Java多线程篇

测试Thread中的常用方法:

1.start():启动当前线程;调用当前线程的run()

2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中

3.currentThred():静态方法,返回执行当前代码的线程

4.getName():获取当前线程的名字

5.setName():设置当前线程的名字

6.yield():释放当前cpu的执行权

7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完成以后线程a才结束阻塞状态。

8.stop():已过时。当执行此方法时,强制结束当前线程。

9.sleep(long millitime):让当前线程“睡眠”指定的millitime毫秒。在指定的millitime毫秒时间内,当前线程是阻塞状态。

10.isAlive():判断当前线程是否存活

package com.atguigu.java;


import static java.lang.Thread.sleep;

class HelloThread extends Thread{
    @Override
    public void run() {
        for (int i = 0;i < 100; i++){
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
            if (i % 20 == 0){
                this.yield();
            }
        }
    }
    public HelloThread(String name){
        super(name);
    }
}




public class ThreadMethodTest {
    public static void main(String[] args) {
        HelloThread h1 = new HelloThread("Thread:1");
//        h1.setName("线程一");
        h1.start();

        Thread.currentThread().setName("主线程");
        for (int i = 0;i < 100; i++){
            if (i % 2 == 0){
                try {
                    sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + ":" + i);

            }

            if (i == 20){
                try {
                    h1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println(h1.isAlive());
    }
}

 线程的优先级:

1.MAX_PRIORITY:10

MIN_PRIORITY:1

NORM_PRIORITY:5

2.如何获取和设置当前线程的优先级:

        getPriority():获取线程的优先级

        setPrioity(int p):设置线程的优先级 - -> 默认优先级

说明:高优先级的线程要占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只要高优先级执行完成以后,低优先级的线程才执行。

package com.atguigu.java;


class HelloThread extends Thread{
    @Override
    public void run() {
        for (int i = 0;i < 100; i++){
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);
            }
            if (i % 20 == 0){
                this.yield();
            }
        }
    }
    public HelloThread(String name){
        super(name);
    }
}




public class ThreadMethodTest {
    public static void main(String[] args) {
        HelloThread h1 = new HelloThread("Thread:1");
//        h1.setName("线程一");
        h1.start();

        h1.setPriority(Thread.MAX_PRIORITY);

        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0;i < 100; i++){
            if (i % 2 == 0){
//                try {
//                    sleep(10);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
                System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getPriority() + ":" + i);

            }

//            if (i == 20){
//                try {
//                    h1.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
        }
        System.out.println(h1.isAlive());
    }
}

例子:创建三个窗口买票,总票数为100张

package com.atguigu.java;

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;
            }
        }
    }
}

public class WindowTest {
    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();
    }
}

 存在线程安全问题,待解决。

总结:今天学习了线程的常用方法、线程优先级的设置、继承Thread方式,多窗口卖票。

明日计划:复习hadoop、学习多线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值