java 线程

异步+线程池:两个线程A、B可以并发执行,没有依赖关系,两者可以独立运行

  https://www.cnblogs.com/liumaowu/p/9293627.html 

同步:线程A、B之间有依赖关系,B运行前必须A先运行完,故同步已经实现了互斥

互斥:线程A、B同时访问临界资源,同时只有一个线程能访问临界资源

进行多线程代码的实现有两种方式:

  1、继承Thread类 2、实现Runnable接口

方法一:继承thread类

  当一个类需要按照多线程的方式处理时,可以让这个类直接继承自Thread类即可,而且继承的时候要覆写好Thread类中提供的run()方法:

  范例:按照要求定义一个线程类
  class MyThread extends Thread { // 继承Thread类
    public void run(){ // 做为线程的主体
      for(int x=0;x<5;x++){
        System.out.println("x = " + x--) ;
      }
    }
   };

  

  

  

    

方法二:实现runnable接口

  

两种实现方式的区别:

  

  

  

  

  

  现在的代码中可以发现,count属性已经被所有的线程对象所共同拥有了

两种实现方式的联系:

  

线程的状态

  

每一个线程对象都要经历五个步骤:
  1、初始化:当创建了一个新的线程对象时
  2、等待:调用了start()方法
  3、执行:调用run()执行的操作的过程
  4、停止:因为所有的线程都需要进行CPU 资源的抢占,那么当一个线程执行完部分代码要交出资源,留给
    其他线程继续执行。
  5、卸载:所有的线程的操作代码都执行完毕之后,就将线程对象卸载下来。

   在本程序中发现出现了一个main 线程,那么这个线程肯定是主方法产生的,之前一直强调,java 本身是属于多线程  的处理机制,所以每次java运行的时候,实际上都会启          动一个JVM的进程。那么既然是多线程的处理机制,实际上主方法是在一个JVM 上产生的一个线程而已,那么一个JVM 启动的时候至

      少启动几个线程呢?两个:main、GC。

 线程的同步与死锁(当多个线程要对同一资源进行操作时,要用到同步操作,同一资源操作不仅仅是写操作,如果有读有些写的,读写部分都要进行同步操作)

  

  

  

  

  

  

  

线程操作的经典案例——生产者和消费者

  以上就是多线程的基本操作,但是在整个多线程存在一个经典的交互案例,生产者和消费者。先通过代码观察问题,
  现在假设说要生产的是一组信息,此组信息有两种选项:
    ·oracle à 数据库
    ·java à www.sun.com.cn

  

  

   

  

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/smallpigger/p/9593949.html