您的位置:首页 > 其它

《线程,死锁,守护线程》

2018-02-28 19:38 134 查看
自定义线程进程:正在执行的程序称作为一个进程,进程负责了内存空间的划分多线程:在一个进程中有多个线程同时在执行不同的任务Main主线程:任何一个java程序,jvm在运行的时候都会创建一个main线程执行main方法中所有的代码Java应用程序中至少有几个线程:至少有两个线程,一个是主线程负责main方法代码的执行,一个是垃圾回收器线程,负责了回收垃圾。多线程的好处:1. 解决了一个进程能同时执行多个任务的问题2. 提高了资源的利用率多线程的弊端:1. 增加了cpu的负担2. 降低了一个进程中线程的执行概率3. 引发了线程安全问题4. 出现了死锁现象创建线程的方式:方式一:1. 自定义一个类继承thread类2. 重写thread的run方法3.创建thread的子类对象,并且调用start方法开启线程,一个线程一旦开启,那么线程就会执行run方法中的代码,run方法千万不能直接调用,直接调用run方法就相当于调用一个普通的方法而已,并没有开启一个新的线程。方式二:1. 自定义一个类实现runnble接口2. 实现runnable接口的run方法,把自定义线程的任务定义在run方法上3. 创建runnable实现类对象4. 创建thread类的对象,并且把runnable实现类的对象作为实参传递5. 调用thread对象的start方法开启一个线程Runnable实现类的对象并不是一个线程对象,只不过是实现了runnable接口的对象而已,只有thread或者是thread的子类才是线程对象。线程声明周期线程的声明周期:创建状态,可运行状态,运行状态,临时阻塞状态,死亡状态。运行阻塞状态:运行状态下的线程一旦执行了sleep或者是wait方法之后,那么该线程会进入临时阻塞状态下,如果线程调用了sleep方法进入的临时阻塞状态,那么线程一旦超过了指定的睡眠时间,那么就会重新进入可运行状态,如果调用了wait方法进入了临时阻塞状态,那么需要其他线程唤醒该线程才可以重新进入可运行状态。线程常用的方法:Thread(String name) 初始化线程的名字GetName() 返回线程的名字SetName(String name) 设置线程的名字Sleep() 线程睡眠指定的毫秒数Rhread类的run方法没有抛出异常类型,所以子类不能抛出异常Getpriority() 返回当前线程对象的优先级 默认线程的优先级是5Setpriority() 设置线程的优先级 currentThread() 返回当前线程对象,该方法是一个静态的线程安全出现线程安全原因或者什么时候使用锁机制:1. 存在两个或者两个以上的线程对象,而且线程之间共享一个资源2. 有多个语句操作了共享资源Java线程同步机制的方式:方式一:同步代码块Synchronized(锁对象){需要被同步的代码...}同步代码块要注意的事项:1. 锁对象可以是任意的一个对象2. 在同步代码块中调用了sleep方法并不会释放锁对象3. 只有真正存在线程安全问题的时候才使用同步代码块,否则会降低效率4. 多线程操作的锁对象必须是唯一共享的(也就是只有一个对象)。否则无效方式二:同步函数可
b930
以通过Synchronized修饰一个函数同步函数要注意的事项:1. 如果是一个非静态的函数的锁对象是this对象,如果是静态的同步函数的锁对象时当前函数所属的类的字节码文件(class对象)2. 同步函数的锁对象是固定的,不能由你来指定的推荐使用同步代码块1. 同步代码块的锁对象可以由我们随意指定,方便空值,同步函数的锁是固定的,不能由我们来指定2. 同步代码块可以很方便控制需要被同步代码的范围,同步函数必须是整个函数的所有代码都被同步了死锁死锁现象出现的根本原因是什么:1. 存在两个或者两个以上的线程2. 存在两个或者两个以上的共享资源死锁现象出现的解决方案:只能尽量避免发生线程的通讯线程通讯的含义:一个线程完成了自己的任务时,要通知另外一个线程去完成另外一个任务。Wait() 等待。如果线程执行了wait()方法,那么该线程会进入等待的状态,等待状态下的线程必须要notify()方法唤醒Notify() 唤醒。唤醒等待的线程Wait()与notity()注意事项:1. wait方法与notity方法是属于object对象的。2. Wait方法与notity方法必须要在同步代码块或者是同步函数中才能使用。3. Wait与notity必须要有锁对象调用。线程的方法Wait一个线程如果执行了wait方法,那么该线程就会进去一个以锁对象为标识符的线程池中等待Notity如果一个线程执行了notity方法,那么就会唤醒以锁对象为标识符的线程池中等待的线程其中一个。Interrupt把线程的等待状态强制清除,可以指定清除哪个线程的等待状态,被清除状态的线程会接收到interruptexception异常线程的停止:1. 停止一个线程我们一般都会通过一个变量去控制的2. 如果停止一个处于等待状态下的线程,我们需要通过变量配合notity方法或者interrupt方法停止一个线程后台线程守护线程:在一个进程中如果只剩下了守护线程,那么守护线程也会死亡怎么判断一个线程是不是守护线程:Isdeamon()判断一个线程是否是守护线程设置线程是守护线程:setdaemon设置线程是否为守护线程,只有true和false一个线程默认都不是守护线程Join方法:加入的意思,如果一个线程如果执行了join语句,那么就有新的线程加入,执行语句的线程必须要让步给新加入的线程完成任务,然后才能继续执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息