java--多线程常用操作方法

目录

1 线程的命名与取得

2 线程休眠方法

3 线程让步方法

4 join( )方法


1 线程的命名与取得

//1.通过构造方法在创建线程时设置线程名称
public Thread(String name);
public Thread(Runnable target,String name);
//2.取得线程名称
public final String getName();
//3.设置线程名称
setName();//启动之后能设置名字;所有其他线程默认Thread-0开始,除main

2 线程休眠方法

public static native void sleep(long millils);//单位为毫秒

:让当前线程暂缓执行,等到了预计时间后再恢复执行;线程休眠会立马交出CPU,但是不会释放锁。

import java.text.SimpleDateFormat;
import java.util.Date;

//线程休眠方法的应用
class MyThread implements Runnable{
    public void run() {
        System.out.println("线程启动:"+Test.printTime());
        for (int i = 0;i < 3;i++){
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("第"+i+"次调用的线程名称为:"+Thread.currentThread().getName());
        }
        System.out.println("线程结束:"+Test.printTime());
    }
}
public class Test{
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread th1 = new Thread(myThread,"th1");
        th1.start();
    }
    public static String printTime(){//该函数返回当前时间
        Date data = new Date();
        SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = dataFormat.format(data);
        return str;
    }
}

运行结果:

3 线程让步方法

public static native void yield();

:该方法暂停执行当前的线程对象,并执行其他线程;yield()方法会让当前线程交出CPU,同样不会释放锁。但是yield()方法无法控制具体交出CPU的时间,并且yield()方法只能让拥有相同优先级的线程有获取CPU的机会。

//线程让步方法的应用

class MyThread implements Runnable{
    public void run() {
        for (int i = 0;i < 3;i++){
            Thread.yield();
            System.out.println("当前线程名称为:"+Thread.currentThread().getName()+",i = "+i);
        }
    }
}
public class Test{
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread th1 = new Thread(myThread);
        Thread th2 = new Thread(myThread);
        Thread th3 = new Thread(myThread);
        th1.start();
        th2.start();
        th3.start();
    }
}

运行结果:

4 join( )方法

:1)join( )只是对Object提供的wait( )做了一层包装而已。

2)等待该线程终止。如果在主线程中调用该方法,会让主线程休眠,让调用该方法的线程先执行完毕后再恢复执行主线程。

【没有调用join方法之前】
import java.util.Date;

class MyThread implements Runnable{
    @Override
    public void run() {
        System.out.println("主线程休眠开始...");
        Test.printTime();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主线程休眠结束...");
        Test.printTime();
    }
}
public class Test{
    public static void main(String[] args) {
        System.out.println("main线程开始...");
        MyThread myThread = new MyThread();
        new Thread(myThread,"子线程A").start();
        System.out.println("main线程结束...");
    }
    public static void printTime(){
        Date data = new Date();
        SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = dataFormat.format(data);
        System.out.println(str);
    }
}

运行结果:

【调用join方法之后】
import java.text.SimpleDateFormat;
import java.util.Date;

class MyThread implements Runnable{
    @Override
    public void run() {
        System.out.println("主线程休眠开始...");
        Test.printTime();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主线程休眠结束...");
        Test.printTime();
    }
}
public class Test{
    public static void main(String[] args) throws InterruptedException {
        System.out.println("main线程开始...");
        MyThread myThread = new MyThread();
        Thread thread = new Thread(myThread);
        thread.start();
        thread.join();//此处调用join方法~
        System.out.println("main线程结束...");
    }
    public static void printTime(){
        Date data = new Date();
        SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = dataFormat.format(data);
        System.out.println(str);
    }
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值