多线程--------线程API

本文详细介绍了Java多线程的API,包括获取线程信息、线程优先级、sleep阻塞及如何创建守护线程。重点讨论了多线程并发安全问题,如临界资源的概念,以及如何使用synchronized关键字解决并发问题,包括同步方法和同步块的使用。同时,提到了互斥锁的概念,以确保不同代码片段的互斥执行。
摘要由CSDN通过智能技术生成

多线程

线程API

获取线程相关信息的方法
package thread;

/**
 * 获取线程相关信息的一组方法
 */
public class ThreadInfoDemo {
   
    public static void main(String[] args) {
   
        Thread main = Thread.currentThread();//获取主线程

        String name = main.getName();//获取线程的名字
        System.out.println("名字:"+name);

        long id = main.getId();//获取该线程的唯一标识
        System.out.println("id:"+id);

        int priority = main.getPriority();//获取该线程的优先级
        System.out.println("优先级:"+priority);

        boolean isAlive = main.isAlive();//该线程是否活着
        System.out.println("是否活着:"+isAlive);

        boolean isDaemon = main.isDaemon();//是否为守护线程
        System.out.println("是否为守护线程:"+isDaemon);

        boolean isInterrupted = main.isInterrupted();//是否被中断了
        System.out.println("是否被中断了:"+isInterrupted);

    }
}
线程优先级

线程start后会纳入到线程调度器中统一管理,线程只能被动的被分配时间片并发运行,而无法主动索取时间片.线程调度器尽可能均匀的将时间片分配给每个线程.

线程有10个优先级,使用整数1-10表示

  • 1为最小优先级,10为最高优先级.5为默认值
  • 调整线程的优先级可以最大程度的干涉获取时间片的几率.优先级越高的线程获取时间片的次数越多,反之则越少.
  • Thread提供了对应的常量:MAX_PRIORITY表示最高优先级10,MIN_PRIORITY表示最低优先级,NORM_PRIORITY表示默认优先级5
package thread;

public class PriorityDemo {
   
    public static void main(String[] args) {
   
        Thread max = new Thread(){
   
            public void run(){
   
                for(int i=0;i<10000;i++){
   
                    System.out.println("max");
                }
            }
        };
        Thread min = new Thread(){
   
            public void run(){
   
                for(int i=0;i<10000;i++){
   
                    System.out.println("min");
                }
            }
        };
        Thread norm = new Thread(){
   
            public void run(){
   
                for(int i=0;i<10000;i++){
   
                    System.out.println("nor");
                }
            }
        };
        min.setPriority(Thread.MIN_PRIORITY);
        max.setPriority(Thread.MAX_PRIORITY);
        min.start();
        norm.start();
        max.start();
    }
}
sleep阻塞

线程提供了一个静态方法:

- static void sleep(long ms)

  • 使运行该方法的线程进入阻塞状态指定的毫秒,超时后线程会自动回到RUNNABLE状态等待再次获取时间片并发运行.
package thread;

public class SleepDemo {
   
    public static void main(String[] args) {
   
        System.out.println("程序开始了!");
        try {
   
            Thread.sleep(5000);//主线程阻塞5秒钟
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        System.out.println("程序结束了!");
    }
}
完成一个倒计时程序
package thread;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

/**
 * sleep阻塞
 * 线程提供了一个静态方法:
 * static void sleep(long ms)
 * 该方法可以让执行该方法的线程处于阻塞状态指定毫秒,超时后线程会再次回到RUNNABLE状态
 * 再次并发
 */
public class SleepDemo {
   
    public static void main(String[] args) throws IOException {
   
        System.out.println(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值