黑马程序员—— 线程基础总结

来源:互联网 发布:补水爽肤水推荐知乎 编辑:程序博客网 时间:2024/06/04 23:24

Java培训、Android培训、iOS培训、.Net培训、期待与您交流!


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

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

一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:
     class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }
 
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

然后,下列代码会创建并启动一个线程:
     PrimeThread p = new PrimeThread(143);
     p.start();

总结为:
   1.定义类继承Thread;
   2.复写Thread中的run方法;
   3.调用线程的start方法,该方法有两个作用:1、启动线程;2、调用run方法。


 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:



--------------------------------------------------------------------------------

     class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }
 
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }
 
--------------------------------------------------------------------------------

然后,下列代码会创建并启动一个线程:


     PrimeRun p = new PrimeRun(143);
     new Thread(p).start();
 每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称。

步骤:
1.定义类实现Runnable接口
2.覆盖Runnable结果中的run方法
3.通过Thread类建立线程对像
4.将Runnable接口的子对象作为实际参数传递给Thread类的构造函数
5.调用Thread类的start方法开启线程并调用Runnable接口子类中的run方法


线程都有自己的名字用Thread.currentThread或this.getName获得线程的名字   setName设置线程的名字


实现方式和继承方式的区别:
1.实现方式的好处:避免了单继承的局限性
在定义线程时,建议使用实现方式。

2.继承Thread:线程代码存放在Thread的子类中
  实现Thread:线程代码存放在Runnable的子类中

线程安全问题  用同步代码块  synchronized(对象){同步代码}


0 0