- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
- 资源分配给进程,同一进程的所有线程共享该进程的所有资源
- 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步
- 线程是指进程内的一个执行单元,也是进程的可调度实体
- 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
- 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行
- 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源
- 系统开销:在创建和撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进 程死掉, 所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。
- 游标结果集:执行select语句后的查询结果
- 游标位置:一个指向游标结果集内某条记录的指针
- 只有当游标处于打开状态时,才能够操作结果集中的数据
- 当游标关闭后,查询结果集就不存在了
public class Singleton{
private volatile static Singleton singleton;
private singleton(){}
public static Singleton getSingleton(){
if(singleton == null){
synchronized(Singleton.class){
singleton = new Singleton();
}
}
return singleton;
}
}
singleton = new Singleton(); 这段代码分三步执行:
1.为singleton分配内存空间
2.初始化singleton
3.将singleton指向分配的内存地址
执行顺序应为:1(分配空间)-> 2(初始化)-> 3(指向分配的地址),
由于JVM具有指令重排的特性,实际执行顺序可能变成1(分配空间)-> 2 (指向分配的地址)-> 3(初始化);
Java允许 编译器 和 处理器 对指令进行重排,指令重排在单线程环境下不会出现问题,因为都是自己在操作,
但是多线程会导致一个线程获得还没有初始化的实例,例如,线程T1执行了 1(分配空间)-> 3(指向分配的地址),
此时T2调用getSingleton()方法后,发现singleton不为空,因此返回singleton,但此时singleton还未被初始化
5、在Java中守护线程和本地线程区别
java中的线程分为两种:守护线程(Daemon)和用户线程(User)
任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolean); true则把该线程设置为守护线程,反之为用户线程,Thread.setDeamon()必须在Thead.start()之前调用,否则会抛出异常
如果 主线程 结束,而 用户线程 还会一直跑,而 守护线程 则会结束
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("11111111");
}
}
});
Thread thread2 = new Thread(new Runner(),"t2");
thread2.start();
Thread thread3 = new Thread(new Runner(),"t3");
thread3.start();
thread.setDaemon(true);
thread.start();
Thread.sleep(3000);
System.out.println("3333333");
}
public class Runner implements Runnable{
@Override
public void run() {
System.out.println("222222222");
}
}
运行结果:(如果是用户线程-Deamon=false,默认是false,则会一直循环11111111)
这是今天的内容,细节需要大家去搜搜各自的关系,毕竟这只是我的记录,相关的细节都是百度查询到自己真的明白,毕竟知识学到手里才是自己的,祝大家Java前程似锦!



