Thread类以及线程的优先级与多线程

线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

    每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。 

如何实现多线程程序呢?

     要实现多线程程序,需要开启进程,
     开启进程,是需要创建系统资源,但是Java语言不能创建系统资源
     只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现
     Java提供了一个类:Thread类
  实现多线程程序的步骤:
  1)将类声明为 Thread 的子类
  2)该子类应重写 Thread 类的 run 方法

  3)在主线程进行该自定义的线程类的对象的创建

构造方法摘要
Thread()
          分配新的 Thread 对象。
Thread(Runnable target)
          分配新的 Thread 对象。
Thread(Runnable target, String name)
          分配新的 Thread 对象。
Thread(String name)
          分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target)
          分配新的 Thread 对象。

Thread 类提供了一些方法

  1)public final void setName(String name):给线程起名称:无参构造的形式+setName()

                        例句:MyThread my1 = new MyThread() ;
                            my1.setName("高圆圆");
//给线程起名字

           2)public final String getName() :获取线程名称

                3)public Thread(String name):有参构造的形式

                        例句:MyThread t1 = new MyThread("张三") ;

                 4)public static Thread currentThread():返回当前正在执行的线程对象的引用

                          例句:System.out.println(Thread.currentThread().getName());

在获取线程名称的时候:Thread-0/1/2.....

   private static int threadInitNumber;  //当前线程编号

public final void setDaemon(boolean on) :true时,表示为守护线程

将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。(守护线程不会立即结束掉,它会执行一段时间在结束掉) 该方法必须在启动线程前调用。

                            例句:public static void main(String[] args) {
                        //创建两个子线程
                        ThreadDaemon td1 = new ThreadDaemon() ;
                        ThreadDaemon td2 = new ThreadDaemon() ;

                             td1.setName("张飞");
                        td2.setName("关羽");

                         //在启动之前,设置为守护线程
                        td1.setDaemon(true); 
                        td2.setDaemon(true);

                         td1.start();
                         td2.start(); 
                        Thread.currentThread().setName("刘备");
                        for(int x =0 ; x < 5 ; x ++) {

                 System.out.println(Thread.currentThread().getName()+":"+x);}}

跟线程优先级相关的方法:
  public final int getPriority()返回线程的优先级。 
  public final void setPriority(int newPriority)更改线程的优先级
  线程存在一个默认优先级

         public static final int MAX_PRIORITY 10 最大优先级
         public static final int MIN_PRIORITY 1 最小优先级

         public static final int NORM_PRIORITY 5 默认优先级


         public final void join():等待该线程终止 interruputedException 中断异常

        假如分别创建三个子线程,让第一个子线程t1执行之后,调用join()等待该线程中,才会再执行t2,t3线程


     public static void sleep(long millis):线程睡眠 指定是时间毫秒值

       throws InterruptedException

两个区别?

        public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的
        public void interrupt()中断线程。 表示中断线程的一种状态 
两个区别?
        wait(): wait()调用的,立即释放锁  (同步锁/Lock锁)
        sleep(): 线程睡眠,调用不会释放锁

        public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的

         public static void yield()暂停当前正在执行的线程对象,并执行其他线程

并行和并发(高并发:MyBatis --->IBatis:半自动化)

                1) 强者逻辑上的同时,指的是同一个时间段内
                2)后者物理上的同时,指的是同一个时间点
实现多线程程序的第二种方式:
  1)自定义一个类,实现Runnable接口
  2)实现接口中的run方法,对耗时的代码进行操作
  3)然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递 
  
 

猜你喜欢

转载自blog.csdn.net/qq_41141896/article/details/80420413
今日推荐