多线程一些简单知识(日后补充)
来源:互联网 发布: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方法运行结束后,线程就结束了,此时线程就会死亡状态。
- 多线程一些简单知识(日后补充)
- NSURLSession简单使用(日后补充)
- IO流一些基本内容(日后补充)
- 记录一些问题,日后需要补充
- 算法思想汇总(日后补充)
- java多线程知识补充
- 一些公式或者知识(不断补充)
- xml和json浅析(日后有待补充)
- 网络编程UDP与TCP(基础知识,日后补充)
- java的一些小知识(不断补充中..)
- Java 自己补充一些知识(1)jre&jdk
- 关于 foundation 的一些知识补充总结(二)
- 关于 foundation 的一些知识补充总结(三)
- 多线程的一些知识
- java多线程一些知识
- 一些不错的课外知识补充
- 关于 foundation 的一些知识补充总结
- 树相关知识(补充)
- JAVA知识_1
- 为你的PyCharm画眉
- <mvc:default-servlet-handler />作用
- ReactNative基础(七)js代码与原生代码进行交互、打包APK
- if流程控制语句
- 多线程一些简单知识(日后补充)
- 关于Storm安装启动出现The storm client can only be run from within a release问题
- 4.3怎么解决跨域问题
- 新思路解决问题
- (学习java)带有头结点的单向循环链表
- Django request.GET 编码错误解决
- Linux进程的实际用户ID和有效用户ID
- NSPopover
- 基于链表的双端队列的类模板的C++实现