1.进程和线程


进程: 运行一个速度,程序在内存分配了运行空间

线程: 在进程中还运行,多个线程之间可以相互的切换。


问题 进程和线程的关系?

       进程包括线程。


2。单线程和多线程 JAVA抢占)

单线程:只有一条路径,必须等第一个执行了才能执行第二个。 比如 排队吃饭。。。。 


 

多线程: 有多条路径 。。。 比如 食堂排队的多个窗口。

JAVA学习日志(线程)_第1张图片


3.线程分为主线程和子线程**

 

主线程就相当于游戏中的主要任务。

子线程就相当于游戏中的分支任务。


列题:

JAVA学习日志(线程)_第2张图片


4.线程的优先级别 

   Java中共有10个级别,110个级别

   从低到高,但它不能与操作系统很好的兼容,比如Winw2000e  7个优先级别,并且不固定的所有希望能移植到各个的平台中,那么建议使用       Max-PRIOKIT

                              MIN-PRIOKIT

                              NORN-PRIOKIT 

 

  注: 高的级别是获得较多的执行机会 

     低的级别是获得较少的执行机会 

 


5.问题区 

问题   为什么一到要复写Run方法??

Start方法自动调用了run方法, run方法中可以自动加入自己想要得一些功能。 

问题   直接调用run方法和调用stat的方法的区别? 

      Run()方法: 普通的方法 不能启动线程

      Start()方法 : 启动一个线程,自动的去调用run方法 

 

public final void join(

              throws InterruptedException

等待该线程终止。 

  

等线程终止 该线程结束后,才能往下执行  

 

public static void yield()暂停当前正在执行的线程对象,并执行其他线程。 

 礼让,暂停当前正在执行的程序对象,并让其他线程执行让给相同优先级的或者是更高的。    

public static void sleep(long millis,int nanos)

                  throws InterruptedException在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权

 

守护线程

   setDaemon(布尔值设置是否为守护线程  

   也就是前台完成 后台才能完成    

 比如:垃圾回收机制

 结束线程

 

         1 修改标志  

  2 interrupt()

  3public void interrupt() 中断线程。 

   

  如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的 checkAccess 方法就会被调用,这可能抛出 SecurityException 

 

 

 

              3 引发异常 

:  尽量不要使用 stop (太过于霸道 会直接终止所有的运行 )和

 

 

并发访问的问题   

数据的不准确性   

Synchronized 同步 

Synchronized this)同步块; this同步当前对象  

Synchronized 同步方法

死锁 !



定义:死锁是进程死锁的简称,

例如:

在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车AB分别由桥的两端驶上该桥,则对于A车来说,它走过桥面左面的一段路(即占有了桥的一部分资源),要想过桥还须等待B车让出右边的桥面,此时A车不能前进;对于B车来说,它走过桥面右边的一段路(即占有了桥的一部分资源),要想过桥还须等待A车让出左边的桥面,此时B车也不能前进。两边的车都不倒车,结果造成互相等待对方让出桥面,但是谁也不让路,就会无休止地等下去 

 

线程的生命周期 

   新建: 创建线程对象  

   就绪: 有执行资格,没有执行权,start(

   运行  有执行资格,有执行权

  



 死亡: 线程对象变为垃圾,等待回收 

JAVA学习日志(线程)_第3张图片