8.1多线程上
来源:互联网 发布:linux chroot命令 编辑:程序博客网 时间:2024/06/15 14:57
(1)进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。线程:
每一个进程都有它自己的内存空间和系统资源。
是进程中的单个顺序控制流,是一条执行路径(2)Java程序的运行原理及JVM的启动是多线程的吗?
一个进程如果只有一条执行路径,则称为单线程程序。
一个进程如果有多条执行路径,则称为多线程程序。
A:Java命令去启动JVM,JVM会启动一个进程,该进程会启动一个主线程去调用main方法。
B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
(3) Thread类的基本获取和设置方法
public final String getName():获取线程的名称。
public final void setName(String name):设置线程的名称
针对不是Thread类的子类中如何获取线程对象名称呢?
public static Thread currentThread():返回当前正在执行的线程对象
Thread.currentThread().getName()
A:继承Thread类
步骤
A:自定义类MyThread继承Thread类。
B:MyThread类里面重写run()?
C:创建对象
D:启动线程
B:实现Runnable接口
步骤:
run()和start()的区别?A:自定义类MyRunnable实现Runnable接口
B:重写run()方法
C:创建MyRunnable类的对象
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递
run():仅仅是封装被线程执行的代码,直接调用是普通方法
start():首先启动了线程,然后再由jvm去调用该线程的run()方法。
为什么要重写run()方法?
run()里面封装的是被线程执行的代码
(4)线程的调度和优先级问题A:线程的调度
a:分时调度
b:抢占式调度
B:获取和设置线程优先级
获取线程对象的优先级
public final int getPriority():返回线程对象的优先级
设置线程对象的优先级
public final void setPriority(int newPriority):更改线程的优先级。
线程默认优先级是5。
线程优先级的范围是:1-10。
线程优先级高仅仅表示线程获取的 CPU时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到比较好的效果。
IllegalArgumentException:非法参数异常。
抛出的异常表明向方法传递了一个不合法或不正确的参数。
A:休眠线程
public static void sleep(long millis)
B:加入线程
public final void join():等待该线程终止。
C:礼让线程
public static void yield():暂停当前正在执行的线程对象,并执行其他线程。
让多个线程的执行更和谐,但是不能靠它保证一人一次。
D:后台线程
public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。
当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。
E:终止线程
public final void stop():让线程停止,过时了。
public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。
(6)线程的生命周期
A:新建:创建线程对象
B:就绪:有执行资格,没有执行权C:运行:有执行资格,有执行权
D:阻塞:没有执行资格,没有执行权
E:死亡:线程对象变成垃圾等待被回收
(7)多线程安全问题的原因(判断一个程序是否有线程安全问题的依据)
A:是否有多线程环境
B:是否有共享数据
C:是否有多条语句操作共享数据
(8)同步解决线程安全问题
A:同步代码块
synchronized(对象) {
需要被同步的代码;
}
这里的锁对象可以是任意对象。
B:同步方法
把同步加在方法上。
这里的锁对象是this
C:静态同步方法
把同步加在方法上。
这里的锁对象是当前类的字节码文件对象
(9)如何把一个线程不安全的集合类变成一个线程安全的集合类
用Collections工具类的方法即可。
List<String> list1 = new ArrayList<String>();// 线程不安全
List<String> list2 = Collections.synchronizedList(new ArrayList<String>()); // 线程安全
- 8.1多线程上
- 马桶上的多线程
- WIN32上的多线程
- Java-----多线程(上)
- 细说C#多线程(上)
- C# 细说多线程(上)
- SL 多线程上
- Java多线程(上)
- c# 多线程 上
- Java的多线程(上)
- 多线程__上
- Java 多线程(上)
- linux上多线程计算
- C#多线程(上)
- Java_多线程(上)
- javaday24-多线程上
- 多线程总结上
- 多线程---上(概念)
- info.plist配置权限
- NDIS描述
- Java中IO流的使用方法之内存操作流
- 敏捷开发与传统开发的区别
- Glide图片加载框架个人笔记
- 8.1多线程上
- Vue模板语法
- “全面集中管控”企业信息化体系建设的思考
- 吴军《智能时代》教会我的那些事
- 利用Python进行NBA比赛数据分析
- 浅释邮件服务相关的DNS记录
- nginx 反向代理,负载均衡,重定向,读写分离
- ELKStack 实战之 Elasticsearch [一]
- cookie mapping原理及应用