线程和进程的区别?

本文详细解析了线程与进程的区别、线程的各种状态及管理方法,并深入探讨了集合的概念、种类及其操作方法。
1、线程和进程的区别?
进程:是指一种自包容的运行程序,由程序系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存。
线程:是进程内部单一的顺序控制流,一个进程拥有多个线程,多个线程共享一个进程的内存空间
2、创建线程有几种方式?如何启动线程?
创建线程的两种方式:
声明一个Thread类的子类,并覆盖run()方法
class Mythread extends Thread{
    public void run(){
    }
}

声明一个实现Runnable接口的类,并实现run()方法
class Mythread implements Runnable{
    public void run(){
    }
}
启动线程调用start()方法
3、调用start()和调用run()的区别?
start()方法表示启动线程,会在主线程之外,产生新的子线程,子线程任务和主任务交替执行
而直接调用run()方法,是普通方法调用,不会在主线程之外产生新的子线程,这是要执行完run()以后,才能执行其他任务。
4、线程有几种状态?
就绪:start启动,运行run方法
睡眠:调用线程sleep方法
挂起:调用yieid方法,线程显示出让cpu控制权
阻塞:等待IO时间输入
死亡:线程run方法执行完毕
等待:调用Object的wait方法
新建:通过new的方式产生一个新线程对象
运行:执行run方法
5、什么是线程优先级?分为几级?
线程优先级:当两个线程同时处于就绪状态,要求得到执行时,优先级高的线程会优先得到执行
优先级分为10级,1-10,数字越大,优先级越高
setPriority(int newp) 设置优先级
6、什么是线程同步?线程同步使用什么关键字?同步会造成什么结果?
线程同步:当两个或两个以上的线程同时访问一个资源时为了保护资源的数据安全只允许同一时间一个线程进行访问,别的线程需要等待该线程放弃对资源的使用权时,才能继续访问,线程同步也称为线程安全。
7、wait和sleep的区别?
1. sleep方法在线程类Thread定义,wait方法在Object中定义
2. wait方法只能放在同步方法或同步块中,表示当前线程对资源进行等待,sleep方法可以放在任何位置,表示当前线程休眠
3. wait方法要释放对象锁,sleep方法不会释放对象锁
4. wait方法使用后,线程需要notify唤醒后才能继续执行,而sleep在休眠结束后,线程自动继续执行

8、集合的作用是什么?集合框架的API结构是怎样的?
主要是存取数据元素。
java.lang.Object
            java.awt.List

9、List、Set、Map集合各自有什么特点?
List:有顺序以线性方式存储,可以存放重复对象
Set集合里面的元素不能重复,加进去元素位置和取元素出来的位置不同
Map:键必须是唯一

10、集合元素如何添加?如何删除?
List:添加:list.add();  删除:list.remove();
Set:添加:set.add();  删除:set.remove();
Map:添加:map.put();  删除:map.remove();
11、集合如何遍历?
①迭代器
Iterator<Student> it = stuSet.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}
for (Student student : stuSet) {
    System.out.println(student);
}
12、List接口实现类ArrayList、Vector、LinkedList的区别?
ArrayList:底层部分使用数组实现,遍历速度快,中间插入和删除元素速度慢,线程不安全;
vector:底层部分同样使用数组实现,线程安全的类;
LinkedList:采用双项链表实现,每个元素除了存放数据以外,还要存放上一个和下一个元素的地址,遍历速度慢,中间插入删除元素速度快;
13、集合如何进行排序?
Collections.sort(list);
14、流按照输入输出方向分有几种?相对于什么而言?
流按照方向分:输入流和输出流,以内存作为参照物。
当从数据源中将数据读取到内存中时,叫输入流(读取流)。
当将内存中的数据写入要数据源时,叫输出流(写入流)。

15、流按照传输内容分有几种?各自的父类是什么?
流按照传输的内容分:字节流和字符流,对象流。
[字节流的父类:InputStream(读取流)  ][ OutputStream(写入流)]
[字符流的父类:Reader        ][        Writer]

16、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况?
操作文件流时,如果文件不存在,那么读取流会抛出文件未找到异常,而写入流,会创建新文件。
流操作以后必须关闭操作,否则不仅浪费内存资源,而且写入流有可能写不进数据。

17、如何判断一个文件是否存在?如何创建一个目录?如何知道一个目录中有多少文件?
File file = new File(path);
//判断文件夹是否存在,如果不存在则创建文件夹
  if (!file.exists()) {
   file.mkdir();
  }
file.listFiles()
18、什么是对象序列化?如何实现对象序列化?
序列化:当需要堆对象进行传输时由于对象中的数据很庞大,无法直接传输,那么在传输之前需要将对象打散成二进制的序列,一遍遍传输,这个过程称为序列化过程,到达目的地后,有需要将二进制序列还原成对象,这个过程称为反序列化过程。
所有需要实现对象序列化的对象必须实现Serializable接口

19、TCP/IP协议分为几层?
四层:
应用层
传输层
网络互联层
网络接口层

20、什么是端口?常见端口有哪些?
每个端口对应着相应的服务
Telnet协议tel  23
简单邮件传输协议 smtp  25
文件传输协议 ftp  21
超文本传输协议http  80

21、TCP和UDP的区别是什么?
TCP协议:
较可靠的双向流协议
三次握手
提供消息确认,错误检测和错误回复等服务,如果数据在传输过程中有损耗,有遗失,会要求发送方重新发送,从而保证数据完整性
UDP协议:
比较不可靠,如果数据在传输中有损耗,不会要求重新发送,优点速度快

22、什么是XML?XML声明是怎样的?XML注释是怎样的?
XML:可扩展的标记语言,以标记和子标记方式描述对象数据
每个xml文档必须有且只有一个根元素
根元素是一个完全包括文档中其他所有元素的元素
所有元素都必须在根元素中定义
声明语句<?xml version="1.0" encoding="UTF-8"?>
<!--  -- >

23、一个格式良好的XML有哪些规定?
语法规范:
- 必须有声明语句<?xml version="1.0" encoding="UTF-8"?>
- 必须有且仅有一个根元素
- 标记大小写
- 属性值引号
- 标记成对
- 空标记关闭<a/>
- 元素正确嵌套

24、格式良好的XML和有效的XML有什么区别?
有效的xml除了要满足xml规范外,还要满足相应DTD和Schema定义的元素规则
有效的xml一定是格式良好的,但良好的xml不一定是有效的

25、DOM和SAX有什么区别?
文档对象模型DOM,一种基于树结构的API
xml简单API SAX,一种事件驱动的API

26、下面代码执行结果是什么?
public class MyThread extends Thread {
    
    public void start(){
        System.out.println("执行start");
    }
    
    public void run(){
        System.out.println("执行run");
    }

    public static void main(String[] args) {
        MyThread m = new MyThread();
        m.start();
    }

}
执行start
27、假定C盘下没有1.txt文件。在执行下面代码后会发生什么情况?
       Writer w = null;
        try {
            w = new FileWriter("c:/1.txt");
            
            bw.write(“abcde”);
        } catch (IOException e) {
            e.printStackTrace();
        }


java.io.FileNotFoundException: c:\1.txt   拒绝访问
<think>我们之前讨论的是parseInt函数,但用户当前的问题是关于进程线程区别,以及单线程线程区别。根据引用内容,我们需要整理相关知识并回答用户的问题。 用户的问题有两个部分: 1.线程线程区别 2. 线程进程区别 我们根据给出的引用内容进行回答,并在回答中自然地添加引用标识。 首先,我们整理线程进程区别与联系(引用[2]): - 进程(Process):是操作系统资源分配的基本单位,每个进程都有独立的地址空间。 - 线程(Thread):是进程内的执行单元,也被称为轻量级进程。同一进程内的多个线程共享进程代码段、数据段等资源,但每个线程拥有独立的堆栈(用于局部变量)程序计数器。 然后,关于单线程线程区别(引用[1]引用[3]): - 单线程:程序按顺序执行任务,一个任务执行完毕后才执行下一个任务。优点:编程模型简单,避免并发问题(如资源竞争)。缺点:无法充分利用多核CPU,如果遇到耗时操作(如I/O等待),整个程序会被阻塞。 - 多线程:程序可以同时执行多个任务(实际是CPU时间片轮转,看起来同时执行)。优点:提高程序执行效率,充分利用多核CPU,避免因一个任务阻塞导致整个程序阻塞。缺点:编程复杂,需要处理线程同步(避免资源竞争),错误难以追踪,过多的线程切换可能降低性能。 引用[1]还提到:多线程虽然可以提高执行速度,但使用不当反而会使程序变慢,因此需要合理使用。 引用[3]给出了一个多线程代码示例:创建两个线程,加上主线程一共三个线程,它们并发执行。 因此,我们的回答可以这样组织: ### 线程进程区别 1. **进程**是操作系统资源分配的基本单位,每个进程拥有独立的代码空间系统资源(如内存空间、文件句柄等)[^2]。 2. **线程**是进程内的执行单元(轻量级进程),同一进程内的线程共享该进程代码空间全局变量,但每个线程拥有独立的堆栈(用于保存局部变量)[^2]。 3. 一个进程可以包含多个线程(至少一个主线程),线程是操作系统任务调度的基本单位[^2]。 ### 单线程与多线程区别 1. **单线程**:程序执行路径只有一条,任务按顺序依次执行。优点是编程简单,无需考虑线程同步问题;缺点是效率较低,无法充分利用多核CPU,且一个耗时操作会阻塞整个程序[^1][^3]。 2. **多线程**:程序包含多个执行路径(线程),可以同时处理多个任务(并发执行)。优点是提高程序执行效率资源利用率,避免单点阻塞;缺点是编程复杂,需要处理线程同步(如锁机制),否则会出现资源竞争等问题,且线程管理不当可能导致性能下降[^1][^3]。 ### 总结 - 进程是资源分配的单位,线程是任务调度的单位。 - 多线程技术能提升程序性能,但需谨慎使用以避免竞争性能损耗[^1]。 然后生成相关问题: §§相关问题§§ 1.线程在什么情况下会导致性能下降? 2. 线程同步有哪些常用方法? 3. 进程间通信有哪些方式? 注意:回答中引用了引用[1]、[2]、[3]的内容,在相应位置加上了引用标识。 </think>### 单线程与多线程区别 1. **执行方式** - **单线程**:程序按顺序依次执行任务(如主线程),前一个任务完成前无法处理新任务[^3]。 - **多线程**:同一进程内创建多个线程(如线程`th1`、`th2`),各线程可并行执行任务,通过时间片轮转实现"伪并行"[^3]。 2. **资源占用** - 单线程仅需维护一个执行栈,资源占用少但无法利用多核CPU[^3]。 - 多线程需为每个线程分配独立堆栈(存储局部变量),共享进程代码全局变量[^2],能充分利用多核CPU但资源消耗更大[^1]。 3. **性能与复杂度** - **优势**:多线程提升执行速度(如I/O阻塞时切换线程),降低系统负荷[^1]。 - **劣势**:需额外处理线程同步(如锁机制),否则并发访问相同资源(如全局变量)会导致竞争问题,增加程序复杂度甚至降低性能[^1][^3]。 4. **应用场景** - 单线程:简单任务或实时性要求低的场景(如小型脚本)。 - 多线程:高并发任务(如Web服务器处理多个请求)[^3]。 --- ### 线程进程区别 1. **资源分配** - **进程**:操作系统资源分配的基本单位,拥有独立内存空间(代码、数据、堆栈)[^2]。 - **线程**:进程内的执行单元(轻量级进程),**共享进程的内存空间**(代码、全局变量),仅保留独立堆栈(局部变量)[^2]。 2. **创建开销** - 进程创建需分配独立资源,开销大且切换慢[^2]。 - 线程创建仅需少量资源(如堆栈),切换速度快[^2]。 3. **通信方式** - 进程间通信需复杂机制(如管道、共享内存)[^1]。 - 线程间可直接读写共享变量,但需同步控制避免竞争[^2]。 4. **健壮性** - 进程间互不影响,一个进程崩溃不影响其他进程[^1]。 - 线程崩溃可能导致整个进程终止(共享同一地址空间)[^2]。 --- ### 对比示例 | **维度** | 进程 | 线程 | |----------------|-----------------------|-----------------------| | **资源独立性** | 独立内存系统资源 | 共享进程资源 | | **创建开销** | 大(需分配内存) | 小(仅分配堆栈) | | **通信效率** | 低(需IPC机制) | 高(直接共享变量) | | **多核利用** | 通过多进程实现 | 多线程并行更高效 | > 总结:进程是资源分配的容器,线程是调度执行的实体。多线程适用于需要高并发的场景,但需合理设计同步机制[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值