多线程一些简单知识(日后补充)

来源:互联网 发布:js获取当前数组下标 编辑:程序博客网 时间:2024/05/29 03:27

多线程


 

 1.线程: 一个进程中的某一个执行单元(某一个任务)

 

 2.进程: 正在运行的程序

 

 3.一个进程 可以有多个线程(我们称为多线程程序),也可以只有一个线程(单线程程序)

 

 4.java是多线程程序,但是JVM默认值只创建一个线程(主线程)

 

 5.(重点)

          5.1继承方式:

方法一: (不推荐)

 1.定义子类 继承 Thread

 

 2.在子类中重写run方法(就是执行任务的方法,在run方法中写任务代码即可)

 

 3.创建子类对象(就是创建一个线程对象)

 

 4.开启这个线程

          5.2实现方式:

1.定义实现类 实现Runnable接口

 

 2.实现类要重写run方法(就是写任务代码的方法)

 

 3.创建实现类对象

 

 4.创建Thread对象,并把刚刚的实现类对象 作为参数传递

 

 5.启动这个Thread对象

          5.3匿名内部类的两种方式

new 父类(){

 *                      重写方法();

 *             };

 *             new 接口(){

 *                      实现方法()

 *             };

5.4 Thread.currentThread().getName()方法获取线程的名字

 注意 

第二种方式实现Runnable接口避免了单继承的局限性,所以较为常用。实现

Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,

一部分线程任务。

    第一种方式继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread   类的子类对象,既是线程对象,有又有线程任务。

        实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable

    接口类型。Runnable接口对线程对象和线程任务进行解耦。

 

 6.线程安全问题:

        多个线程 同时执行,执行同一个任务,操作同一个数据,这时候可能出现安全问题

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

 

 7.(了解)三种解决安全问题的方式:

        7.1同步锁(同步代码块)

            格式: synchronized(锁对象){

                        要同步的那些代码

                    }

        7.2同步方法:

            格式:public synchronized void 方法名(){

                     要同步的那些代码

                }

            同步方法和同步锁,原理是一样,同步方法用的锁对象是this对象

            如果同步方式是静态的,那么同步方法用的锁对象是 当前类.class

          7.3Lock接口(推荐)

    Lock l = new ReentrantLock();

            l.lock();

                 要同步的那些代码

            l.unlock();

 8.线程的状态图:

        New,Runnable,Block,Terminated

线程包含以下几个状态:

                   1.新建状态:

                               调用构造方法创建线程对象后,线程就会处于新建状态。

                   2.就绪状态:

                               一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()

                               方法。在调用start()方法后,运行run()方法之前,线程就会处于就绪状态。

                   3.运行状态:

                              当线程获得CPU的资源后,才会进入运行状态,调用run方法。

                   4.阻塞状态:

                              当正在运行的线程还没有运行结束,暂时让出CPU资源,让其它处于就绪

                              状态的线程获得CPU资源。

                   5.死亡状态:

                              当线程的run方法运行结束后,线程就结束了,此时线程就会死亡状态。


 

原创粉丝点击