课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 昆明达内老师讲解的多线程入门知识
  • 昆明达内老师讲解的多线程入门知识

    发布:昆明Java培训      来源:达内新闻      时间:2016-07-26

  • 在昆明达内java培训班的同学们想必都知道在java中,实现多线程编程的主要有两种,一种是继承Thread类,一种是实现Runnable接口。使用Thread的方式来实现多线程是具有局限性的,因为java只支持单继承,不支持多继承,为了 改变 种限制,最好使用Runnable接口的方式来实现多线程。

    自定义的线程对其他的线程可以有共享和不共享之分。所谓共享和不共享,可以从字面意思来理解,共享即多个线程可以访问同一个变量,比如在实现投票的功能时,多个线程可以同时 处理一个人的票数;所谓不共享即每个线 都有自己的变量,增减不受别人的影响,也不影响别人,大有君子之交淡如水的感觉。

    讲到线程,昆明java培训班 的老师发现有一个不得不提的关键字---synchronized,它的存在有点类似于督察,在run方法前加 synchronized关键字,可以使多个线程在执行run方法时,以排队的方式 处理。synchronized关键字可以在任意对象及方法上加锁,而 这段加锁的代码称为”互斥区“或者”临界区“(名字无所谓,要注意内涵)。当一个线程在调用run前,先要判断run方法有没有上锁,如果上锁,说明有其 他线程正在调 run方法,必须等其他线程对run方法调用结束后才可以执行run方法,这样就达到了让线程排队的效果。

    下面让昆明达内java培训班的老师介绍一些常用的多线程的方法:

    1、currentThread()方法可返回发代码段正在被哪个线程调用的信息。

    2、isAlive()方法的功能是判断当前的线程是否处于活动状态。

    3、sleep()方法的作用是在指定的毫秒数内让当前的”正在执行的线程“休眠(暂停执行)。这个“正在执行的线程”指的是this.currentThread()返回的线程。

    4、getId()方法是取得线程的唯一标识,就像我们的身份证,每人一个,绝不重复。

    5、this.interrupted():测试当前线程是否已经中断

    6、this.isInterrupted():测试线程是否已经中断、

    7、suspend与resume方法是用来暂停线程,在使用suspend与resume方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问公共同步对象,除此之外,也容易造成因为线程的暂停而导致数据不同步的情况,总而 之,要慎用。

    8、yield()方法的作用是放弃当前的CPU资源,将他让给其他的任务去占用CPU执行时间,但放弃的时间不确定,有可能刚放弃,马上又获得CPU时间片。

    一个巴掌,都长短不一,更何况是多线程呢,在操作系统中,线程可以划分优先级,优先级较高的占用CPU的资源较多,通俗来讲CPU优先运行优先级较高的线程中的任务对象。

    log4j配置文件详解

    在开发中经常会碰到日志,网上关于日志的框架也很多,像log4j、self4j、common-logging等,下面对log4j进行介绍。

    log4j 是java开发的日志框架,具有低侵入的特点,其重点使用的部分是log4j的配置文件,有两格式的配置文件,一种XML的,一种properties 的,在开发中常用properties格式,对properties格式的配置文件做详细描述,log4j.properties

    ### set log levels ### 

    log4j.rootLogger = debug,stdout,D,E 

    log4j.appender.stdout = org.apache.log4j.ConsoleAppender 

    log4j.appender.stdout.Target = System.out 

    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 

    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n 

    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 

    log4j.appender.D.File = F://logs/log.log 

    log4j.appender.D.Append = true 

    log4j.appender.D.Threshold = DEBUG  

    log4j.appender.D.layout = org.apache.log4j.PatternLayout 

    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 

    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 

    log4j.appender.E.File =F://logs/error.log  

    log4j.appender.E.Append = true 

    log4j.appender.E.Threshold = ERROR  

    log4j.appender.E.layout = org.apache.log4j.PatternLayout 

    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

    上面是properties格式的配置文件

    log4j.rootLogger

    指定日志的输出级别和输出目的地,如,debug,sdtout,file

    debug 指 定日志的输出界别,log4j一共定义了9中日志界别:off、fatal、error、warn、info、debug、all推荐使用其中的四种级 别:error、warn、info、debug,如果使用了info,则error、warn、info级别都会输出,如果使用warn则error、 info级别 日志都会输出;sdtout、file指定的是日志输出的位置的一个名称

    log4j.appender.sdtout=org.apache.log4j.ConsoleAppender 指定sdtout的输出使用的是ConsoleAppender类,即输出到控制台

    log4j.appender.stdout.Target = System.out 使用System.out进行输出

    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 输出的布局

    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n  输出的日志格式

    默认情况下配置log4j.rootLogger对整个项目其作用,如果想对某个包起作用可以配置如下

    log4j.logger.com.cn.mapper=debug com.cn.mapper是包名,此包下的所有类的日志都会输出,输出的级别为debug,即error、warn、info、debug级别的日志都会输出。

    综上所述,一个log4j的配置文件包括以下及部分

    log4j.rootLogger=[info|debug],sdtout,mail,file,appenderName   日志文件的级别,输出目的地名称

    log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender  appenderName 需要换成相应的名称 org.apache.log4j.DailyRollingFileAppender指定使用的类

    这 里的类有以下几种:org.apache.log4j.ConsoleAppender(控制台)、 org.apache.log4j.FileAppender(文件)、 org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)、 org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个 的文件

    ConsoleAppender 是输出到控制台,有以下可选项Threshold(指定日志输出的最低级别)、Target(输出控制台)

    log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout  日志的格式布局,有这样几个可选的布 局:org.apache.log4j.HTMLLayout(以HTML表格形式布局)、 org.apache.log4j.PatternLayout(可以灵活地指定布局模式)、 org.apache.log4j.SimpleLayo ut(包含日志信息的级别和信息字符串)、 org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

    下面是一个输出到控制台的log4j的配置文件,

    ### set log levels ### 

    log4j.rootLogger = debug,stdout

    log4j.appender.stdout = org.apache.log4j.ConsoleAppender 

    log4j.appender.stdout.Target = System.out 

    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 

    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n 

    了解了log4j的配置文件之后,便可以按照需要配置日志的输出目的地、输出级别等。

    java的多线程就讲到这里,后面还有更多资讯。

    推荐文章

上一篇:java-rpc框架

下一篇:Java 基础

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56