黑马程序员-java多线程

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

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

 

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:

  • 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
  • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:


     class ThreadTest extends Thread {

         String name;

         ThreadTest (String name) {

             this.name = name;

         }

 

         public void run() {

             // 代码

         }

     }

 


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

     ThreadTest t = new ThreadTest (“啊”);

     t.start();

 

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


     class RunnableTest implements Runnable {

         private Stirng name;

         RunnableTest (Stirng name) {

             this. name = name;

         }

 

         public void run() {

             // 代码

         }

     }

 


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

     RunnableTest r = new RunnableTest (“啊”);

     new Thread(r).start();

 

使用Runnable接口创建多线程,可以较好在多个相同程序代码的线程去处理同一资源,把虚拟CPU(线程)同程序的代码,数据有效分离,更能体现面向对象的设计思想。在而可以避免由于JAVA的单继承特性带来的局限性。当线程被构造时,需要的代码和数据通过一个对象作为构造函数参数传递进去,这个对象就是一个实现了Runnable接口的类的实例。

每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称。

同步线程是以牺牲程序性能为代价,所以在能确定程序没有安全性的问题时尽量少用同步语句。同步所要接受的对象必须是同一个对象,必须定义在run()之外,否则起步到同步的效果。同步线程类似于行走独木桥,每次仅执行一个线程。执行完一个线程再执行另个线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值