[Java][线程][线程的基础认知]创建/使用/定时

发布时间:2023年12月26日
线程知识小结:
1.线程的创建:
1.1当线程内的任务需求很复杂时,我们在一个新的java文件中创建一个新的类 比如当我们需求多线程向服务端通讯的时候 例如MyThread这个新的类中去@override public void run(){}这个方法
1.2但是当线程中的任务很简单,我们不希望再额外创建一个新的类文件来解决问题,我们就会使用匿名内部类 比如你在创建Thread对象的时候 在new Thread()后加上{}然后@override public void run(){}方法即可
1.3因为Java只支持单继承,如果我们无法继承Thread又该如何呢?很简单,我们绕个圈子来解决问题。我们可以先创建一个继承了Runnable接口的对象,然后在这个对象中@override public void run(){}这个方法
然后将这个继承了Runnable的对象作为Thread的一个参数 算是曲线救国了
1.4常用的Thread创建线程操作
public Thread() :分配一个新的线程对象。
public Thread(String name) :分配一个指定名字的新的线程对象。
public Thread(Runnable target) :分配一个带有指定目标新的线程对象。
public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。
2.既然我们已经创建了对象,那么接下来就是对这个对象进行一些操作了,比方说定义线程要执行的任务(run)获取当前线程的名称(getName)返回当前执行线程的引用(currentThread)
检测线程是否活跃(isAlive)以及十分重要的返回线程的优先级(getPriority),以及改变线程的优先级(setPriority)
2.1咱们首先来看run,你可能会疑惑,我们为什么要对线程进行run的方法呢?这是因为我们可能没有自定义线程/自定义Runnable并且复写@Override 如果上述没有发生 我们就需要手动来写线程执行的内容了
2.2获取线程的名字 假设有一个线程对象的名字为mt 那么我获取当前线程的名字也就是mt.getName;这里得到的名字也就是我在初始化对象的时候 含参构造中所输入的名字 一个字符串
2.3设置线程的名字,也就是针对2.2中线程的名字进行一个改变,这个不必多言,懂得都懂
2.4Thread是一个静态类,就有点像Arrays和Collections一样
2.5线程的优先级是一个整数1是最低优先级 5是普通优先级也就是main的优先级 10是最高优先级
3.常用的一些方法补充
public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。
public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
public static void yield():yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,希望优先级与当前线程相同或更高的其他线程能够获得执行机会,但是这个不能保证,完全有可能的情况是,当某个线程调用了yield方法暂停之后,线程调度器又将其调度出来重新执行。
void join() :等待该线程终止。
void join(long millis) :等待该线程终止的时间最长为 millis 毫秒。如果millis时间到,将不再等待。
void join(long millis, int nanos) :等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
public final void stop():强迫线程停止执行。 该方法具有固有的不安全性,已经标记为@Deprecated不建议再使用,那么我们就需要通过其他方式来停止线程了,其中一种方式是使用变量的值的变化来控制线程是否结束。

public class Main{
    public static void main(String[] args){
        /*
        线程知识小结:
        1.线程的创建:
        1.1当线程内的任务需求很复杂时,我们在一个新的java文件中创建一个新的类 比如当我们需求多线程向服务端通讯的时候 例如MyThread这个新的类中去@override public void run(){}这个方法
        1.2但是当线程中的任务很简单,我们不希望再额外创建一个新的类文件来解决问题,我们就会使用匿名内部类 比如你在创建Thread对象的时候 在new Thread()后加上{}然后@override public void run(){}方法即可
        1.3因为Java只支持单继承,如果我们无法继承Thread又该如何呢?很简单,我们绕个圈子来解决问题。我们可以先创建一个继承了Runnable接口的对象,然后在这个对象中@override public void run(){}这个方法
        然后将这个继承了Runnable的对象作为Thread的一个参数 算是曲线救国了
        1.4常用的Thread创建线程操作
        public Thread() :分配一个新的线程对象。
        public Thread(String name) :分配一个指定名字的新的线程对象。
        public Thread(Runnable target) :分配一个带有指定目标新的线程对象。
        public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。
        2.既然我们已经创建了对象,那么接下来就是对这个对象进行一些操作了,比方说定义线程要执行的任务(run)获取当前线程的名称(getName)返回当前执行线程的引用(currentThread)
        检测线程是否活跃(isAlive)以及十分重要的返回线程的优先级(getPriority),以及改变线程的优先级(setPriority)
        2.1咱们首先来看run,你可能会疑惑,我们为什么要对线程进行run的方法呢?这是因为我们可能没有自定义线程/自定义Runnable并且复写@Override 如果上述没有发生 我们就需要手动来写线程执行的内容了
        2.2获取线程的名字 假设有一个线程对象的名字为mt 那么我获取当前线程的名字也就是mt.getName;这里得到的名字也就是我在初始化对象的时候 含参构造中所输入的名字 一个字符串
        2.3设置线程的名字,也就是针对2.2中线程的名字进行一个改变,这个不必多言,懂得都懂
        2.4Thread是一个静态类,就有点像Arrays和Collections一样
        2.5线程的优先级是一个整数1是最低优先级 5是普通优先级也就是main的优先级 10是最高优先级
        3.常用的一些方法补充
        public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。
        public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
        public static void yield():yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,希望优先级与当前线程相同或更高的其他线程能够获得执行机会,但是这个不能保证,完全有可能的情况是,当某个线程调用了yield方法暂停之后,线程调度器又将其调度出来重新执行。
        void join() :等待该线程终止。
        void join(long millis) :等待该线程终止的时间最长为 millis 毫秒。如果millis时间到,将不再等待。
        void join(long millis, int nanos) :等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
        public final void stop():强迫线程停止执行。 该方法具有固有的不安全性,已经标记为@Deprecated不建议再使用,那么我们就需要通过其他方式来停止线程了,其中一种方式是使用变量的值的变化来控制线程是否结束。

         */
        //2.4-2.5的范例
        System.out.println("以下是2.4-2.5部分的演示");
        Thread t = new Thread(){
            @Override
            public void run(){
                System.out.println(getName()+"的优先级"+getPriority());
            }
        };
        t.setPriority(Thread.MAX_PRIORITY);
        t.start();
        System.out.println(Thread.currentThread().getName()+"的优先级"+Thread.currentThread().getPriority());

        System.out.println("以下是3.0部分的演示");

        for(int i=10;i>=0;i--){
            System.out.println(i);
            try{
                Thread.sleep(1000);

            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
        System.out.println("新年快乐");
    }
}

文章来源:https://blog.csdn.net/qq_37511412/article/details/135215060
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。