JAVA语言线程学习的一些知识点
小标 2019-01-09 来源 : 阅读 1035 评论 0

摘要:本文主要向大家介绍了JAVA语言线程学习的一些知识点,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言线程学习的一些知识点,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


一:线程和进程的区别


  1,线程是共享变量的,而进程是有私有的变量


  2,创建线程和创建进程都需要消耗系统资源,但是创建线程的开销会更小


二,创建线程的两种方式


    1,实现Runnable接口,再用这个类创建Thread对象


         Class MyRunnable implements Runnable{


         //实现run方法


         public void run{


         }


               }


              Class …..


               {


                     …….


                       Thread thread =new Thread(MyRunnable);


                          Thread.start();//


                    }


        2,继承Thread 重写run()方法


           Class MyThread extends Thread{


public void run(){


}


        }


注意:在此不能直接调用run方法,如果调用run方法,则还是在原来的线程里执行方法。而Thread.start()方法可以创建一个新的线程


三:中断线程


1, 三种情况下,线程会被结束


(1)执行到return 方法;


(2)执行完所有语句;


(3)遇到错误,抛出异常


2,还有一种强行结束线程的方法 interrupt();


四:线程的状态


(1)new 创建线程后,调用start()方法前


(2)Runnable 调用start()方法之后,此状态下只能说该线程是可以运行的,它随时可能被系统切断,也随时被系统激活;


(3)Blocking


(4)Waiting 这两种线程的区别是blocking状态下随时会被系统激活,而wait状态只有被显式通知之后才可以进入runnable状态。


(5) Timed waiting


(6)Terminated


五:线程的优先级


线程的优先级与系统环境有关,比如windows系统接口提供7中不同的优先级水平


六:守护线程


守护线程should never 访问持久化的资源例如数据库或者文件,因为它有可能会在任何时间结束。


七:未捕获异常的处理


八:线程同步机制Synchronization


1,线程不安全的原因


cpu对内存中的某一个变量进行运算时,经历三个过程:


a,将内存中的制定变量加载load到寄存器register中


b,完成指定的运算


c,将运算的值推回到内存中


当一个线程完成ab两个步骤时可能会被调度器中断操作,此时变量被加载到寄存器中,例如内存中B=24;加载到寄存器中完成加一运算,变成25,但在推回内存前线程 被中断;接着另一个线程调用这个变量进行运算,此时加载到内存时是24,完成运算加5后推回内存,此时是29,可能第一个线程此时被唤醒,把25又推回内存中。错误就这样产生了。


2,线程同步所要做的事情就是,在完成对一个变量运算修改完成之前,不允许其他线程来访问这个变量,对象,或文件。


3,线程安全的实现方法:


a,Lock Object


Lock 是一个抽象类,实例化时需要用ReentrantLock去创建。


用法:private Lock lock=new ReentrantLock();


public void .......{


......


lock.lock();


try{


task;


}


finally{


lock.unlock(); //一定要在这个线程对变量或文件访问完之后把lock去了,否则其他线程不能访问


}


b,Condition Object


Condition需要从Lock中获得,即Condition condition=lock.newCondition();


Condition 中主要用的方法有:


await();


signalAll();


signal();


这个对象的主要作用是:当一个线程得到lock后,访问内存中的变量,但是发现某些条件不满足那么就放弃这个lock,让其他的线程有执行的机会。


Class Bank{


Lock lock=new ReentrantLock();


Condition condition=lock.newCondition();


public void transger(){


lock.lock();


while(true or false)


condition.await();


task;


condition.signalAll();


}


}


c,Synchronized关键字


用此关键字修饰方法表示此方法是线程安全的,例如:


public Synchronized getName(){


statements;


}


等同于


public void method(){


this.intrinsicLock.lock();


try{


methodbody;


}finally{


this.intrinsLock.unlock();


}


d,同步块Synchronized


例如:Class Bank {


private accounts;


public Object lock=new Object();


public void transfer(){


Synchronized(lock){


blocks;


}


}


}


e.不稳定的变量和final变量


九:高级应用


1,线程池


 


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程