多线程Tread中的常用方法

Java多线程:常用方法解析
本文介绍了Java中多线程的常用方法,包括start()启动线程、run()执行任务、currentThread()获取当前线程、getName()和setName()操作线程名,以及yield()、join()和sleep()等线程控制方法。通过实例解析了这些方法的使用和作用。

多线程的方法

Tread中常用的方法
  1. start():启动当前线程;调用当前线程的run()
  2. run():通常需要重写Thread类中的方法,将创建的线程要执行的操作声明在此方法中
  3. currentThread():静态方法,返回执行当前代码的线程
  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 new1;

/*
* 多线程的创建,方式一:继承Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run()--->将此线程执行的操作声明在run()中
* 3.创建Thread类的子类的对象
* 4.通过此对象调用start()
*
* 例子:遍历100以内的所有偶数
* */


//1.创建一个继承于Thread类的子类
class MyThread1 extends Thread {
    //2.重写Thread类的run()
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

class MyThread2 extends Thread {
    //2.重写Thread类的run()
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

public class demo1{
    public static void main(String[] args) {
        //3.创建Thread类的子类对象
        MyThread1 t1 = new MyThread1();
        MyThread2 t2 = new MyThread2();//在启动一个线程,需要重新创建一个线程对象


        //4.通过此对象调用star();先启动当前线程,然后调用当前线程的run()
        t1.start();
        t2.start();
        for (int i = 20; i < 40; i++){
            if(i%2 != 0){
                System.out.println("这是主线程:"+i);
            }
        }

    }
}

结果

这是主线程:21
这是主线程:23
Thread-1:1
Thread-1:3
Thread-1:5
Thread-1:7
Thread-1:9
Thread-1:11
Thread-1:13
Thread-1:15
Thread-1:17
Thread-1:19
Thread-0:0
Thread-0:2
Thread-0:4
Thread-0:6
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-0:18
这是主线程:25
这是主线程:27
这是主线程:29
这是主线程:31
这是主线程:33
这是主线程:35
这是主线程:37
这是主线程:39

匿名子类的方式

package new1;

public class demo2 {
    public static void main(String[] args) {
        //创建Thread的匿名子类的方式
        new Thread() {
            public void run() {
                for (int i = 0; i < 20; i++) {
                    if (i % 2 == 0) {
                        System.out.println(Thread.currentThread().getName() + ":" + i);
                    }
                }
            }
        }.start();

        new Thread() {
            public void run() {
                for (int i = 0; i < 20; i++) {
                    if (i % 2 != 0) {
                        System.out.println(Thread.currentThread().getName() + ":" + i);
                    }
                }
            }
        }.start();
    }
}

答案

Thread-0:0
Thread-0:2
Thread-0:4
Thread-0:6
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-0:18
Thread-1:1
Thread-1:3
Thread-1:5
Thread-1:7
Thread-1:9
Thread-1:11
Thread-1:13
Thread-1:15
Thread-1:17
Thread-1:19
命名,获取名,与currentThread()
package new1;

public class demo2 {
    public static void main(String[] args) {
        MyThread3 h1 = new MyThread3();
        h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

class MyThread3 extends Thread {
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

答案

主线程:1
线程一:0
线程一:2
线程一:4
线程一:6
线程一:8
线程一:10
线程一:12
线程一:14
线程一:16
线程一:18
主线程:3
主线程:5
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
另一种命名方式(利用Thread类中的构造方法命名)
package new1;

public class demo2 {
    public static void main(String[] args) {
        MyThread3 h1 = new MyThread3("线程一一");
        //h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

class MyThread3 extends Thread {
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }

    public MyThread3(String name){
        super(name);
    }
}

答案

线程一一:0
线程一一:2
线程一一:4
主线程:1
线程一一:6
主线程:3
主线程:5
线程一一:8
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
线程一一:10
线程一一:12
线程一一:14
线程一一:16
线程一一:18
yield方法
package new1;

public class demo2 {
    public static void main(String[] args) {
        MyThread3 h1 = new MyThread3("线程一一");
        //h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

class MyThread3 extends Thread {
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
            if(i%4 == 0){
                yield();  //yield方法
            }
        }
    }

    public MyThread3(String name){
        super(name);
    }
}

答案

主线程:1
线程一一:0
主线程:3
线程一一:2
主线程:5
线程一一:4
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
线程一一:6
线程一一:8
线程一一:10
线程一一:12
线程一一:14
线程一一:16
线程一一:18

join方法

package new1;

public class demo2 {
    public static void main(String[] args) {
        MyThread3 h1 = new MyThread3();
        h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
            if( i== 1){
            try {                        
                h1.join();    //jion方法+异常处理
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            }
        }
    }
}

class MyThread3 extends Thread {
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }

}
sleep
package new1;

public class demo2 {
    public static void main(String[] args) {
        MyThread3 h1 = new MyThread3();
        h1.setName("线程一");
        h1.start();

        //给主线程命名
        Thread.currentThread().setName("主线程");
        for (int i = 0; i < 20; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
           
        }
    }
}

class MyThread3 extends Thread {
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                try {
                    sleep(1000);      //sleep方法,强制休息一秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值