Java教程 第54页

Java 线程生产者/消费者-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 线程生产者/消费者

Java线程教程 – Java线程生产者/消费者 生产者/消费者是使用wait()和notify()方法的典型线程同步问题。 例子 有四个类:缓冲区,生产者,消费者和生产者CumerumerTest。 Buffer类的一个对象具有一个整数数据元素,它将由生产者生成并由消费者消费。 我们必须同步对缓冲区的访问,因此只有当缓冲区为空时,生产者才产生一个新的数据元素,而消费者只有在可用时才消耗缓冲区的数据。 ProducerConsumerTest类用于测试程序。 import java.util.Random; class Consumer extends Thread { private Buffer buffer; public Consumer(Buffer buffer) { this.buffer = buffer; } public void run() { int data; while (true) { data = buffer.consume(); } } } public class Main { public static void main(String[] args) { Buffer buffer = new Buffer(); Producer p = new Producer(buffer); Consumer c = new Consumer(buffer); p.start(); c.start(); } } class Producer extends Thread { private Buffer buffer; public Producer(Buffer buffer) { this.buffer = buffer; } public void run() { Random rand = new Random(); while (true) { int n = rand.nextInt(); buffer.produce(n); } } } class Buffer { private int data; private boolean empty; public Buffer() { this.empty...

JSON 模式

Java JSON教程 – JSON模式 像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。 JSON模式也以JSON格式编写。它用于验证JSON数据。 JSON模式示例 以下代码显示了基本的JSON模式。 { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Book", "description": "A book from Java2s.com", "type": "object", "properties": { "id": { "description": "ID for JSON", "type": "integer" }, "name": { "description": "Name for JSON", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true } }, "required": ["id", "name", "price"] } $schema 声明该模式是根据草案v4规范编写的。 title 关键字将标题设置为模式。 description 字段用于描述模式。 type 关键字定义了我们的JSON数据的第一个约束。 properties定义各种键及其值类型,要在JSON文件中使用的最小值和最大值。 必需标记所需的属性。 minimum 是对值的约束,表示最小可接受值。 exclusiveMinimumtrue表示该值应大于“minimum”的值。 maximum 是对值的约束,表示最大可接受值。 exclusiveMaximumtrue表示该值应大于’minimum’的值。 multipleOf 指定如果实例由此关键字的值除法的结果是整数,则数字实例是有效的。 maxLength 设置字符串的最大长度。 minLength 设置字符串的最小长度。 pattern 字段指定与值匹配的正则表达式。 http://json-schema.org有可用于定义JSON模式的完整关键字列表。

JSON 数据类型

Java JSON教程 – JSON数据类型 下表列出了JSON支持的数据类型。 类型 描述 Number 双精度,浮点格式。不使用八进制和十六进制格式。无NaN或无穷。例如,1,9,0,-4。分数像.3,.9 指数如e,e +,e-,E,E +,E-var json-object-name = { string : number_value} String 双引号Unicode带反斜杠转义。 转义序列: \f \n \r \t \u var json-object-name = { string : "string value"} Boolean true 或者 false var json-object-name = { name: true/false,} Array 值的有序序列。 数组元素用方括号[element,element,element, ]括起来。 Value 可以是字符串,数字,true或false,null等 Object 键:值对的无序集合。 对象以大括号括起,以’ { ‘开头,以 ‘ } ‘结尾。 键:值对之间用分隔, 键必须是字符串,并且应该彼此不同。{ string : value, string1 : value1,.......} Whitespace 可以在任何一对令牌之间使用 null 空 例子 示例显示Number数据类型,值不应引用: var obj = {grade: 97} 字符串数据类型的示例。 var obj = {name: "abc"} var obj = {name: "Jack", grade: 97, pass: true} 以下JSON数据具有三本书的数组。 { "books": [ { "language":"Java" , "edition":"second" }, { "language":"C++" , "edition":"fifth" }, { "language":"C" , "edition":"third" } ] } 示例显示对象: { "id": "1", "language": "Java", "page":...

Log4j 日志到数据库

Log4j教程 – Log4j日志到数据库 我们可以使用log4j API通过使用org.apache.log4j.jdbc.JDBCAppender对象将信息记录到数据库中。 下表列出了JDBCAppender的配置属性。 属性 描述 bufferSize 设置缓冲区大小。默认大小为1。 driver JDBC驱动程序类。默认为sun.jdbc.odbc.JdbcOdbcDriver。 layout 设置布局。默认是org.apache.log4j.PatternLayout。 password 设置数据库密码。 sql 指定用于每个日志记录请求的SQL语句。 URL 设置JDBC URL user 设置数据库用户名 例子 首先,创建一个表来存储日志信息。 CREATE TABLE LOGS (USER_ID VARCHAR(20) NOT NULL, DATED DATE NOT NULL, LOGGER VARCHAR(50) NOT NULL, LEVEL VARCHAR(10) NOT NULL, MESSAGE VARCHAR(1000) NOT NULL ); 然后,为JDBCAppender创建配置文件log4j.properties,该文件控制如何连接到数据库以及如何将日志消息存储到LOGS表。 # Define the root logger with appender file log4j.rootLogger = DEBUG, DB # Define the DB appender log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender # Set JDBC URL log4j.appender.DB.URL=jdbc:mysql://localhost/Your_Database_Name # Set Database Driver log4j.appender.DB.driver=com.mysql.jdbc.Driver # Set database user name and password log4j.appender.DB.user=your_user_name log4j.appender.DB.password=your_password # Set the SQL statement to be executed. log4j.appender.DB.sql=INSERT INTO LOGS VALUES("%x","%d","%C","%p","%m") # Define the layout for file appender log4j.appender.DB.layout=org.apache.log4j.PatternLayout 以下代码显示如何将信息记录到数据库中。 import org.apache.log4j.Logger; import java.sql.*; import java.io.*; import java.util.*; public class Main{ static...

Log4j 日志格式

Log4j教程 – Log4j日志格式 Apache log4j提供布局对象,以根据各种布局格式化日志数据。 布局类层次结构中的顶级类是抽象类org.apache.log4j.Layout。 org.apache.log4j.Layout是log4j API中所有其他Layout类的基类。 它有以下子类。 DateLayout HTMLLayout PatternLayout。 SimpleLayout XMLLayout 布局类的方法 下表列出了Layout类中的类。 方法 描述 public abstract boolean ignoresThrowable() 如果忽略Throwable对象。 public abstract String format(LoggingEvent event) 实现此方法以进行格式化布局。 public String getContentType() 返回布局对象使用的内容类型。 public String getFooter() 记录消息的页脚信息。 public String getHeader() 日志消息的头信息。

Log4j 日志级别

Log4j教程 – Log4j日志级别 org.apache.log4j.Level类具有以下级别。 我们还可以通过对Level类进行子类化来定义我们的自定义级别。 级别 描述 ALL 所有级别包括自定义级别。 DEBUG 调试消息日志。 ERROR 错误消息日志,应用程序可以继续运行。 FATAL 严重错误消息日志,必须中止运行应用程序。 INFO 信息消息。 OFF 最高可能的排名,旨在关闭日志记录。 TRACE 高于DEBUG。 WARN 用于警告消息。 控制级别 在Log4j中,级别是有序的。 如果A>= Y,则在级别为Y的记录器中启用级别X的日志请求。 对于标准级别,我们有ALL <DEBUG<INFO<WARN<ERROR<FATAL<OFF。 以下示例显示如何过滤所有DEBUG和INFO消息。 它使用logger方法 setLevel(Level.XXX)设置所需的日志记录级别。 以下代码打印除Debug和Info之外的所有消息: import org.apache.log4j.*; public class Main { private static org.apache.log4j.Logger log = Logger .getLogger(Main.class); public static void main(String[] args) { log.setLevel(Level.WARN); log.trace("Trace Message!"); log.debug("Debug Message!"); log.info("Info Message!"); log.warn("Warn Message!"); log.error("Error Message!"); log.fatal("Fatal Message!"); } } 当你编译和运行LogClass程序时,它将产生以下结果: Warn Message! Error Message! Fatal Message! 使用配置文件设置级别 我们可以使用Log4j配置文件来控制日志级别设置,而不更改源代码。 以下代码显示如何通过配置文件执行log.setLevel(Level.WARN)。 # Define the root logger with appender file log = c:/log4j log4j.rootLogger = WARN, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log}/log.out # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%m%n 现在让我们使用我们的下面的程序: import org.apache.log4j.*; public class Main { private static org.apache.log4j.Logger log =...

Log4j 日志记录方法

Log4j教程 – Log4j日志记录方法 Logger类具有处理日志记录活动的方法。我们可以使用两个静态方法创建Logger类的实例: public static Logger getRootLogger(); public static Logger getLogger(String name); 第一个方法返回没有名称的根日志记录器。第二个方法按名称返回记录器。记录器的名称可以是任何字符串。我们通常使用类或包名称如下: static Logger log = Logger.getLogger(log4jExample.class.getName()); 日志记录方法 我们可以使用Logger类中的以下方法来记录消息。 方法 描述 public void debug(Object message) 打印Level.DEBUG级别的消息。 public void error(Object message) 打印Level.ERROR级别的消息。 public void fatal(Object message) 打印具有Level.FATAL级别的消息。 public void info(Object message) 打印Level.INFO级别的消息。 public void warn(Object message) 打印Level.WARN级别的消息。 public void trace(Object message) 打印Level.TRACE级别的消息 所有级别都在org.apache.log4j.Level类中定义。 import org.apache.log4j.Logger; public class Main { private static org.apache.log4j.Logger log = Logger.getLogger(Main.class); public static void main(String[] args) { log.trace("Trace Message!"); log.debug("Debug Message!"); log.info("Info Message!"); log.warn("Warn Message!"); log.error("Error Message!"); log.fatal("Fatal Message!"); } }

Log4j HelloWorld

Log4j教程 – Log4j HelloWorld 我们使用以下配置文件来控制log4j。 根记录器的级别定义为DEBUG,并将名为FILE的追加器附加到它。 追加器FILE定义为org.apache.log4j.FileAppender,并写入位于日志目录中的名为“log.out”的文件。 定义的布局模式为%m%n,它打印以换行符结尾的日志消息。 # Define the root logger with appender file log = c:/log4j log4j.rootLogger = DEBUG, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log}/log.out # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%m%n log4j在Java代码中 以下Java类展示了如何使用Log4J日志库。 import org.apache.log4j.Logger; import java.io.*; import java.sql.SQLException; import java.util.*; public class Main { /* Get actual class name to be printed on */ static Logger log = Logger.getLogger( log4jExample.class.getName()); public static void main(String[] args) throws IOException,SQLException{ log.debug("Hello this is an debug message"); log.info("Hello this is an info message"); } } 所有库都应该在CLASSPATH中可用,log4j.properties文件应该在PATH中可用。

Log4j 配置

Log4j教程 – Log4j配置 我们可以通过设置Log Level,定义Appender和在配置文件中指定Layout对象来配置log4j。 log4j.properties 文件是一个log4j配置文件,它保留键 – 值对中的属性。 默认情况下, LogManager 在CLASSPATH中查找名为log4j.properties的文件。 log4j.properties语法: 以下代码显示了appender X的log4j.properties文件的语法: # Define the root logger with appender X log4j.rootLogger = DEBUG, X # Set the appender named X to be a File appender log4j.appender.X=org.apache.log4j.FileAppender # Define the layout for X appender log4j.appender.X.layout=org.apache.log4j.PatternLayout log4j.appender.X.layout.conversionPattern=%m%n log4j支持UNIX风格的变量替换,如${variableName}。 以下示例显示如何创建log4j.properties文件。 它将根记录器的级别设置为DEBUG,并将名为FILE的附加器附加到它。 追加器FILE定义为org.apache.log4j.FileAppender,并写入位于日志目录中的名为“log.out”的文件。 定义的布局模式为%m%n,这意味着打印的日志消息后面将跟随换行符。 # Define the root logger with appender file log4j.rootLogger = DEBUG, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log}/log.out # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%m%n 日志级别 我们使用DEBUG和两个appenders。所有可能的选项是: 跟踪 调试 信息 警告 错误 致命 所有 这些级别将在Log4j日志记录级别中解释。 追加者 Apache log4j提供了用于将日志消息打印到不同目标(如控制台,文件,套接字,NT事件日志等)的Appender对象。 每个Appender对象都具有与其关联的不同属性,这些属性指示该对象的行为。 属性 描述 layout Appender使用布局对象和转换模式来格式化日志记录信息。 target 目标可以是控制台,文件或其他项目,具体取决于附加程序。 level 级别过滤日志消息。 threshold Appender可以具有阈值级别,并忽略具有低于阈值级别的级别的任何日志记录消息。 filter Filter对象决定日志记录请求是由特定Appender处理还是忽略。 我们可以使用以下方法在配置文件中添加一个Appender对象到Logger: log4j.logger.[logger-name]=level, appender1,appender..n 我们可以用XML格式编写相同的配置。 <logger name="com.apress.logging.log4j" additivity="false"> <appender-ref ref="appender1"/> <appender-ref ref="appender2"/> </logger> 要添加Appender对象,请使用以下方法:...

Lucene 搜索文件

Lucene教程 – Lucene搜索文件 搜索过程是进行搜索的过程。 下表列出了在搜索过程中使用的类。 类 描述 IndexSearcher 读取/搜索索引处理后创建的索引。 Term 搜索的最低单位。它类似于索引过程中的字段。 Query 抽象类,包含各种实用程序方法,是所有类型查询的父类。 TermQuery TermQuery是一个查询对象,我们可以使用它来创建许多复杂的查询。 TopDocs TopDocs存储前N个搜索结果。 例子 以下代码显示如何搜索索引的文件。 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT...