线程相关点

在线程当中经常会遇到各种的特殊的办法,虽然不可能每一个办法都可以记得住,但要对其中比较常见的办法进行理解和记忆

比如说获得当前线程对象,其名字或者对其改名可以

static Thread currentThread()获取当前线程对象
String getName()获取线程对象名字
void setName(String name)修改线程对象名字

通过这三个办法进行相关的操作,但大部分的办法操作相比于这三个看起来会简单一些

据个例子,在示范代码当中存在这样的代码

 

class MyThread2 extends Thread {
    public void run(){
        for(int i = 0; i < 100; i++){

            Thread currentThread = Thread.currentThread();
            System.out.println(currentThread.getName() + "-->" + i);


        }
    }
}

在这段代码中,注意其中的第七行出现的currentThread办法 这个代码的作用是实现了麦年对程序时输出其代码段现在正在被那个线程索调用的信息

可以使用这样的代码进行验证

public class ThreadTest04 {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
    }
}

得到其输出是main,可以确定是输出其相关的信息,输出线程的名字的原因是我在这里使用getName()方法,从而减少了里面会输出的信息 

假如我把其中的getName()去除之后可以得到结果是

Thread[main,5,main]

那么回来说这个问题,也就很好理解这里面的所有的输出

 之前说过对于线程中断使用sleep,当出现现场呢个睡眠需要终止的情况的则需要interrupt。这个应该也有提过一下

但在这还是大体的说一下其重要性。

public class ThreadTest08 {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable2());
        t.setName("t");
        t.start();

        // 希望5秒之后,t线程醒来(5秒之后主线程手里的活儿干完了。)
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 终断t线程的睡眠(这种终断睡眠的方式依靠了java的异常处理机制。)
        t.interrupt();
    }
}

class MyRunnable2 implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "---> begin");
        try {
            // 睡眠1年
            Thread.sleep(1000 * 60 * 60 * 24 * 365);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //1年之后才会执行这里
        System.out.println(Thread.currentThread().getName() + "---> end");
}

这里还是借用一位大佬的代码,放心并不会将你的cpu占有太长时间,将代码放置一段时间就会暂停运行。接下来就可以好好看看这段代码,如果将MyRunnable2中关于sleep这一段及相关删除,那么会发现程序会在处理5秒之后结束。

 

public class ThreadTest04 {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable2());
        t.setName("t");
        t.start();

        // 希望5秒之后,t线程醒来(5秒之后主线程手里的活儿干完了。)
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 终断t线程的睡眠(这种终断睡眠的方式依靠了java的异常处理机制。)
        t.interrupt();
    }
}

class MyRunnable2 implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "---> begin");

        //1年之后才会执行这里
        System.out.println(Thread.currentThread().getName() + "---> end");
    }
}

但这里的sleep好像没有被终止掉,这里现在存在疑惑,如果谁有经验的话可以写在评论里面

这里还存在其他的几个小知识run方法在书写的时候会发现并不存在throws,这里涉及java的一个y原则,子类不可以抛出比父类更多的异常。

上次提到了终止线程,现在存在更简单的方法,即将在想要终止线程的位置对其标记更改成为false即可。如果需要一个特殊值的话,尽量将这一大段全部写在if判断当中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java线程是指在一个程序中可以同时执行多个线程,并且每个线程独立运行,互不干扰。Java线程Java 平台提供的重要特性,常用于提高程序并发性能和解决复杂问题。 Java线程的重知识包括以下几个方面: 1. 线程的创建和启动:可以通过继承 Thread 类或实现 Runnable 接口来创建线程,并使用 start() 方法启动线程。 2. 线程的生命周期:线程的生命周期包括新建、就绪、运行、阻塞和死亡等阶段,可以通过调用 sleep()、wait()、join() 等方法来控制线程的状态转换。 3. 线程同步:多个线程之间可能会共享资源,为了保证数据的一致性和避免冲突,需要使用同步机制,如 synchronized 关键字、Lock 接口等。 4. 线程间通信:多个线程之间可以通过共享内存或者消息传递的方式进行通信,如使用 wait()、notify()、notifyAll() 等方法。 5. 线程池:线程池可以管理和复用线程,减少线程的创建和销毁开销,提高系统的性能。 6. 线程安全性:在多线程环境下,存在资源竞争和线程安全性问题,需要采取相应的措施来保证线程的安全性,如使用 synchronized 关键字、volatile 关键字等。 7. 线程调度:Java 提供了线程调度器来控制线程的执行顺序和优先级,可以使用 yield()、join()、setPriority() 等方法进行调度。 8. 线程异常处理:在多线程环境下,线程的异常需要处理和捕获,可以使用 try-catch 块来捕获异常。 综上所述,Java线程Java 平台提供的重要特性,掌握多线程的概念和相关知识可以帮助开发者提高程序的并发性能和解决复杂问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值