7.27java自学

多线程

进程: 每个程序的运行都是一个进程的运行。当我们在电脑上同时打开了很多程序,意味着多个进程在运行。CPU处理器分毫秒级地切换地处理各进程的线程,达到多个进程同时运行的状态。
线程:每个进程拆分开来的一步步程序操作,叫线程。

1.Java

在java中,线程的父类是Thread类。目前我学到的两种通过该类实现多线程的方法如下:

第一种–继承Thread类

  1. 继承Thread;
  2. 子类重写(覆盖)父类的run()方法;
  3. 创建子类对象;
  4. 启动多线程.start()

第二种–实现Runable接口

  1. 构造一个类实现Runable接口;
  2. 重写(覆盖)Runable接口的Run方法;
  3. 创建Thread的(有参构造方法)实现类对象;
  4. 启动多线程.start()

这两种方法比较,第一种用子类run的方法感觉上方便。


以下提供了线程运行时的3个方法:

a.sleep(long millis(限时等待时间)) —>变成 限时 等待状态

a.yield() —>让出这1次的竞争(谦让)

a.join() —> 在多线程执行时,让变量插队执行到底。


重点来了

线程同步,线程安全

直接讲重点:synchornized( 临界资源 ){//代码块是原子操作}
synchornized 关键字 提供了上锁的作用, 被修饰的代码在执行时,其他线程由于没有(synchornized)锁标记不会插入,即必须执行完一个某个线程的synchornized代码块之后,才会正常按多线程方式执行。

这样涉及到了另一种情况,多重synchornized情况下,不同线程取得了不同的锁标记,使得程序无法进行下去,产生各个线程均 阻塞(blocked) 的情况,称为 死锁

死锁破解

解决死锁的方法:

a.wait()                      //释放自己的锁标记进入无限等待状态	
a.notify()   a.notifyAll()    //唤醒无限等待状态的线程,继续进行程序
注意:wait()  notify()  两个方法均在synchornized代码块中写,
                        因为synchornized代码块就是锁标记
                        
注意:二者是一个变量。

你可能感兴趣的:(java入门)