初步理解多线程与多进程

1.什么是进程和什么又是线程???
进程是指运行中的应用程序,每个进程都有自己独立的地址空间;
线程是进程中执行运算的最小单位,一个进程中可以有多个线程。
2.多线程的集中实现方式
(1):继承thread类,thread类本质上还是实现了runnable接口的一个实例,启动线程的唯一方法就是通过thread类的start()方法,启动一个新的线程并执行run()方法,可以重写run()方法来实现自己定义的方法。

runnable和callable区别:
Runnable和Callable都代表那些要在不同的线程中执行的任务,runnable是从jdk1.0就有了,callable是在1.5后增加的,callable的call()方法可以返回值和抛出异常,而runnable中的run()方法没有这些功能。

    (3):实现callable接口通过future task包装器来创建thread线程
3.多线程中的忙循环是什么
    忙循环就是程序员创建的一个空循环,让线程进行等待,不同于wait(),sleep()他们都放弃了CPU控制,目的是为了保留CPU缓存,在多核系统中,一个线程醒来的时候可能会在另一个内核运行,这样会重建缓存,为了避免重建缓存和减少等待重建的时间。
4.进程之间如何进行通信
    (1):管道(pipe)-----半双工通信模式,数据只能单向流动
    (2):消息队列(messagequeue)-----消息队列里有消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限。
    (3):套接字(socket)-----可以用于不同进程间的通信
    (4):共享内存(shared memory)-----映射一段能被其他进程访问的内存,这段内存由一个进程创建但多个进程都可以访问。
    (5)信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
5.线程间如何通信
    (1):锁机制:包括互斥锁,读写锁,条件变量
        1.互斥锁---提供了以排他方式防止数据结构被并发修改的方法
        2.读写锁---允许多个线程同时读取共享数据,而对写操作是互斥的
        3.条件变量---条件变量可以以原子的方式阻塞进程,知道某个特定条件为真为止,对条件的测试是在互斥锁的保护下进行的,条件变量始终与互斥锁一起使用
    (2):信号量机制:包括无名线程信号量和命名线程信号量
    (3):信号机制:类似进程间的信号处理
6.同步和异步有何不同,在什么情况下分别使用它们?
    (1):如果数据将在线程间共享,必须使用同步存取
    (2):如果应用程序在对象上调用了一个需要花费长时间执行的方法并且不需要让程序等待方法返回的时候,就应该使用异步编程。
    同步交互---指发送一个请求,需要等待返回才能发送下一个请求
    异步交互---指发送一个请求,不需要等待返回随时可以发送下一个请求
7.Hashtable与Hashmap的区别
    hashtable与hashmap都实现了map接口
    (1):在hashtable中,无论是key还是value都不能为null
    (2):在hashmap中,null可以作为主键,这样的键只能有一个,但可以有一个或者多个键所对应的值为null,在使用get()方法返回的时候,既可以表示hashmap中没有该键亦可以表示该键的值为null,索引在hashmap中判断某个键是否存在的时候,不能使用get()方法,应该使用containsKey()方法。
    hashmap与hashtable最大的不同是hashmap是线程不安全的,在多线程环境下,需要手动实现同步机制,hashtable是线程安全的,方法是同步的,可直接用于多线程环境中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值