java 多线程2

来源:互联网 发布:爱淘宝是淘宝客吗 编辑:程序博客网 时间:2024/04/27 22:08
复习:


线程


1、让我们应用程序可以在同一时间处理多个任务(在同一时间我们有两段程序(多个对象)在执行)。


2、处理多任务不只是线程,在我们操作系统是支持多任务的(使用的是多进程来完成的)


3、在我们操作系统中可以执行多个应用程序,每一个应用程序的一次执行就是一个进程。


   在这个进程多可以有多个线程来处理多个任务。


4、进程之间资源消耗太好,效率不高,线程之间通信比较简单,效率也高,一般我们来处理多任务
   都是使用线程来完成。


5、通常情况下,我们的java 程序的main 函数入口,就是一个应用程序的执行,我们也把这个主函数
   执行的程序叫主线程,在这个主线程中我们可以创建并且启动多个子线程。


6、如果有任何一个子线程没有结束,那么主线程就不可能停止。如果说主线程停止,那么在这个
   主线程中的所有子线程都将停止。


7、java 的程序创建线程类的方式:


    都要重写父类或者接口中run 方法,这个方法将是每个线程要执行的内容,就相当于是子线程


    主函数。


    Thread  是Runnable 接口实现类。


   1) 继承Thread类


   2) 实现Runnable 接口




8、创建线程(其实就是去创建线程类的对象)


   MyThread  mt  = new  MyThread();


   调用setName 设置线程名称,也可以在这个类创建有参数的构造函数来设置线程的名称。


   MyThread2 mt2 = new  MyThread2();


   借助Thread 类才可以完整创建这个线程,甚至可以使用这一个对象创建多个线程(资源共享)


   同样可以调用setName ,Thread  t = new  Thread(mt2,"t2");




9、启动线程


  都得去调用start 方法,这个方法是Thread 类的,Runnable 接口的线程对象,要启动就必须


   借助Thread 类。


  就算我们调用start 方法,也只是让我们的线程处于就绪状态,到底什么时候运行,取决于cpu


10、线程在运行的过程中(在整个生命周期中,有很多状态)


  初始化(new 一个了线程)


  就绪状态(准备,可运行)


  运行状态(线程阻塞:睡眠,合并,暂停,等待,同步)


  停止




11、线程调度(线程的状态变化,这个变化的过程就是线程的调度)


  1) currentThread()  得到当前正在运行的线程对象。Thread.currentThread();


  2)  sleep(),  让当前线程 休眠一定时间,精确到毫秒, 时间到了以后,就会进入就绪状态。


  3) 判断线程是否还活着。t.isAlive()


  4) stop(), 线程停止。


  5)join(),等待线程终止,线程的合并。就相当于是一个线程在执行。


  6)yield(),把自己的执行机会让给别人,高风亮节。不代表不执行了,而是让给了别人。


     自己又直接处于就与状态,不属于阻塞。


  7)setPriority  线程的优先级  getPriority


     默认都是5,    1---10, 区间,  只有1(最低)  5(默认)  10(最高优先级)


     如果你设置了优先级,也只是让这个线程执行几率多一些。




12、多线程共享资源接水的例子。(线程的同步的问题)synchronized


   线程多任务中,抢占式多任务。


   排队多任务(同步多任务)。synchronized


   让你的资源是有限制的,如果这个资源正在被一个线程占用,其他线程就不能使用。


13、作业:火车售票售票模拟.


   1、火车站站10张票, 1901次 12-01,三个人买票。


   2、火车站站10张票, 1901次 12-01,三个窗口,三个人买票。




14、线程等待和唤醒。 wait  notfiy  notfiyall  synchronized


    等待和唤醒的方法都是Object 类,任何类都会有这个些方法。


    生产者和消费者Producer   Consume   SyncStack  WoTou


15、死锁。正常编码,正常程序执行中是不允许出现的。


    两个线程都处于互相等待的状态。


作业:java 中关键字加解释。
 



0 0
原创粉丝点击