Java Thread(线程)

来源:互联网 发布:java闰年判断switch 编辑:程序博客网 时间:2024/05/29 14:01

程序

程序是一段静态的代码,它是应用程序执行的蓝本。

进程

进程是程序的一次动态执行过程,它对应了从代码加载,执行到执行完毕的一个完整的过程,这个过程也是进程本身从生产,发展到消亡的过程。

操作系统

现在的操作系统可以同时管理一个计算机系统中的多个线程,也就是说可以让计算机系统中的多个进程轮流使用CPU资源。

线程与进程

Thread是Java.lang包下的一个类
在java中,线程也是一种对象,是java应用程序中的单任务流。但并非所有对象都可以称为线程,只有实现Runable接口的类的对象才能称为线程。所以创建线程必须实现Runable接口。
线程是比进程更小的执行单位,一个进程在执行的过程中可以产生多个线程。形成多条执行线索,也就是每条线程也有他自身的产生,发展到消亡的过程。线程间可以共享进程中的某些内存单元(包括代码和数据),线程的中断与恢复可以更加节省系统的开销。

并发

同时完成多个任务。

多线程

就是多个线程对象

线程的生命周期:

new,runnable,not runnable,dead
start() 启动线程
run() 线程执行
sleep() 优先级高的线程可以在它的run()方法中调用sleep()方法来使自己放弃cpu资源,休眠一段时间。
isAlive() 线程处于新建状态时,线程调用isAlive()方法返回false。在线程run()方法结束之前,也就是没有进入死亡状态之前,线程调用isAlive()方法返回true。
currentThread():可以查看当前使用CPU的线程
interrupt():一个占有CPU资源的线程可以让休眠的线程调用interrupt()方法唤醒自己。即导致休眠的线程发生InterruptedException异常。从而结束休眠,重新排队等待CPU资源。

public class TestThread implements Runnable {    Thread test1, test2;//声明一个线程test1,test2    public  TestThread(){//TestThread的构造方法        test1 = new Thread(this);//在TestThread类的构造方法中新建一个线程test1。        test2 = new Thread(this);        //this的意思是新建一个线程test1之后,并把这个test1托管给TestThread这个类来运行        test1.start();//调用start方法启动这个线程        test2.start();    }    public static void main(String[] args) {//java的主线程      new TestThread();    }    @Override    public void run() {//实现runnable接口后实现的方法  这个方法体叫做线程体//      while(true){//      System.out.println("我是这个线程");//      try {//          test1.sleep(1000);//      } catch (InterruptedException e) {//          // TODO Auto-generated catch block//          e.printStackTrace();//      }//      }         Thread th =    Thread.currentThread();         if (th == test1) {             System.out.println("我是线程1");            }         if(th == test2){             System.out.println("我是线程2");         }    }}

线程同步:
在处理多线程的问题时,我们必须注意这样一个问题:当两个或者多个线程同时访问一个变量,并且一个线程需要修改这个变量。我们应该对这样的问题做出处理。
线程同步就是若干个线程都需要使用一个synchronized修饰的方法,及线程中的若干个线程都需要使用一个方法,而这个方法用synchronized给予了修饰。
多个线程调用synchronized方法必须遵守同步机制:

0 0