GVKun编程网logo

Java并发编程:Java Thread方法join的简单总结(java并发编程深度解析)

3

这篇文章主要围绕Java并发编程:JavaThread方法join的简单总结和java并发编程深度解析展开,旨在为您提供一份详细的参考资料。我们将全面介绍Java并发编程:JavaThread方法jo

这篇文章主要围绕Java并发编程:Java Thread方法join的简单总结java并发编程深度解析展开,旨在为您提供一份详细的参考资料。我们将全面介绍Java并发编程:Java Thread方法join的简单总结的优缺点,解答java并发编程深度解析的相关问题,同时也会为您带来Java JNDI 与其他 Java 技术的协作:揭秘 Java JNDI 与 Java EE 等技术的融合、Java JNDI 与其他 Java 框架的兼容性:解析 Java JNDI 与其他 Java 框架的兼容性和协作、java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结、Java 技术体系 ------JDK、 JRE、 Java ME 、 Java SE 、Java EE的实用方法。

本文目录一览:

Java并发编程:Java Thread方法join的简单总结(java并发编程深度解析)

Java并发编程:Java Thread方法join的简单总结(java并发编程深度解析)

 

虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结。

  一、作用

  Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码:

  

复制代码
public class JoinTest {
    public static void main(String [] args) throws InterruptedException {
        ThreadJoinTest t1 = new ThreadJoinTest("小明");
        ThreadJoinTest t2 = new ThreadJoinTest("小东");
        t1.start();
        /**join的意思是使得放弃当前线程的执行,并返回对应的线程,例如下面代码的意思就是:
         程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕
         所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会
         */
        t1.join();
        t2.start();
    }

}
class ThreadJoinTest extends Thread{
    public ThreadJoinTest(String name){
        super(name);
    }
    @Override
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println(this.getName() + ":" + i);
        }
    }
}
复制代码

上面程序结果是先打印完小明线程,在打印小东线程;  

上面注释也大概说明了join方法的作用:在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。注意,这里调用的join方法是没有传参的,join方法其实也可以传递一个参数给它的,具体看下面的简单例子:

复制代码
public class JoinTest {
    public static void main(String [] args) throws InterruptedException {
        ThreadJoinTest t1 = new ThreadJoinTest("小明");
        ThreadJoinTest t2 = new ThreadJoinTest("小东");
        t1.start();
        /**join方法可以传递参数,join(10)表示main线程会等待t1线程10毫秒,10毫秒过去后,
         * main线程和t1线程之间执行顺序由串行执行变为普通的并行执行
         */
        t1.join(10);
        t2.start();
    }

}
class ThreadJoinTest extends Thread{
    public ThreadJoinTest(String name){
        super(name);
    }
    @Override
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println(this.getName() + ":" + i);
        }
    }
}
复制代码

上面代码结果是:程序执行前面10毫秒内打印的都是小明线程,10毫秒后,小明和小东程序交替打印。

所以,join方法中如果传入参数,则表示这样的意思:如果A线程中掉用B线程的join(10),则表示A线程会等待B线程执行10毫秒,10毫秒过后,A、B线程并行执行。需要注意的是,jdk规定,join(0)的意思不是A线程等待B线程0秒,而是A线程等待B线程无限时间,直到B线程执行完毕,即join(0)等价于join()。

  

  二、join与start调用顺序问题

  上面的讨论大概知道了join的作用了,那么,入股 join在start前调用,会出现什么后果呢?先看下面的测试结果

复制代码
public class JoinTest {
    public static void main(String [] args) throws InterruptedException {
        ThreadJoinTest t1 = new ThreadJoinTest("小明");
        ThreadJoinTest t2 = new ThreadJoinTest("小东");
        /**join方法可以在start方法前调用时,并不能起到同步的作用
         */
        t1.join();
        t1.start();
        //Thread.yield();
        t2.start();
    }

}
class ThreadJoinTest extends Thread{
    public ThreadJoinTest(String name){
        super(name);
    }
    @Override
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println(this.getName() + ":" + i);
        }
    }
}
复制代码

上面代码执行结果是:小明和小东线程交替打印。

所以得到以下结论:join方法必须在线程start方法调用之后调用才有意义。这个也很容易理解:如果一个线程都没有start,那它也就无法同步了

 

  三、join方法实现原理

  有了上面的例子,我们大概知道join方法的作用了,那么,join方法实现的原理是什么呢?

  其实,join方法是通过调用线程的wait方法来达到同步的目的的。例如,A线程中调用了B线程的join方法,则相当于A线程调用了B线程的wait方法,在调用了B线程的wait方法后,A线程就会进入阻塞状态,具体看下面的源码:

复制代码
public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }
复制代码

从源码中可以看到:join方法的原理就是调用相应线程的wait方法进行等待操作的,例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,从而达到同步的目的。

 

 

Java JNDI 与其他 Java 技术的协作:揭秘 Java JNDI 与 Java EE 等技术的融合

Java JNDI 与其他 Java 技术的协作:揭秘 Java JNDI 与 Java EE 等技术的融合

java jndi 与其他 java 技术的协作:揭秘 java jndi 与 java ee 等技术的融合

Java JNDI 简介

Java JNDI(Java Naming and Directory Interface)是Java中用于访问命名和目录服务的API,与Java EE等技术的协作至关重要。在实际开发中,Java JNDI可以与Java EE框架无缝融合,为应用程序提供更灵活的资源访问方式。本文将深入探讨Java JNDI与其他Java技术的协作,揭示它们之间的关联与互补,帮助开发者更好地理解和应用这些技术。

Java JNDI 与 Java EE 的协作

Java JNDI与Java EE有着密切的协作,在Java EE应用程序中扮演着重要的角色。Java EE规范中定义了JNDI作为标准的命名和目录服务API,Java EE应用程序可以通过JNDI来访问各种命名和目录服务中的数据。

JNDI在Java EE中的应用

在Java EE应用程序中,JNDI主要用于以下几个方面:

  • 资源查找: Java EE应用程序可以使用JNDI来查找各种资源,如数据源、消息队列、EJB组件等。这些资源通常由应用程序服务器管理,Java EE应用程序可以通过JNDI来访问这些资源,而无需关心资源的具体位置和访问方式。
  • 服务发现: Java EE应用程序可以使用JNDI来发现其他服务,如WEB服务、EJB组件等。这些服务通常由应用程序服务器注册,Java EE应用程序可以通过JNDI来查找这些服务,并与之通信。
  • 命名空间管理: Java EE应用程序可以使用JNDI来管理命名空间,如全局JNDI命名空间和Web应用程序JNDI命名空间等。Java EE应用程序可以通过JNDI来创建、修改和删除命名空间中的对象,并访问命名空间中的对象。

Java JNDI与Java EE的集成

Java JNDI与Java EE的集成主要通过以下几个方面来实现:

立即学习“Java免费学习笔记(深入)”;

  • Java EE应用程序服务器: Java EE应用程序服务器通常提供了一个JNDI服务,用于管理命名空间和资源。Java EE应用程序可以通过JNDI服务来查找资源和服务。
  • Java EE规范: Java EE规范中定义了JNDI作为标准的命名和目录服务API。Java EE应用程序可以使用JNDI来访问各种命名和目录服务中的数据。
  • JNDI API: Java JNDI API提供了一组丰富的类和接口,用于访问命名和目录服务中的数据。Java EE应用程序可以通过JNDI API来实现资源查找、服务发现和命名空间管理等功能。

Java JNDI 与其他 Java 技术的协作

除了Java EE之外,Java JNDI还与其他Java技术有着密切的协作,如Java RMI、Java CORBA、Java Servlet等。

Java JNDI与Java RMI的协作

Java JNDI与Java RMI(Remote Method Invocation)协作,使Java程序能够通过网络调用远程对象的方法。Java RMI中,远程对象可以注册到JNDI命名空间中,其他Java程序可以通过JNDI来查找远程对象,并调用远程对象的方法。

Java JNDI 与 Java CORBA 的协作

Java JNDI 与 Java CORBA(Common Object Request Broker Architecture)协作,使Java程序能够与其他语言(如c++C#等)编写的 CORBA 对象进行通信。Java CORBA 对象可以注册到 JNDI 命名空间中,其他 Java 程序或其他语言编写的 CORBA 程序可以通过 JNDI 来查找 CORBA 对象,并调用 CORBA 对象的方法。

Java JNDI 与 Java Servlet 的协作

Java JNDI 与 Java Servlet 协作,使 Servlet 能够访问各种资源,如数据源、消息队列等。Servlet 可以通过 JNDI 来查找资源,并使用这些资源。

总结

Java JNDI 作为 Java 平台上通用的命名和目录服务 API,不仅与 Java EE 有着密切的协作,还与其他 Java 技术(如 Java RMI、Java CORBA、Java Servlet 等)有着密切的协作。在项目开发中,Java JNDI 发挥着重要的作用,帮助 Java 程序员轻松地访问和操纵命名和目录服务中的数据,实现资源查找、服务发现和命名空间管理等功能。

>软考高级考试备考技巧/历年真题/备考精华资料" target="_blank">点击免费下载>>软考高级考试备考技巧/历年真题/备考精华资料

以上就是Java JNDI 与其他 Java 技术的协作:揭秘 Java JNDI 与 Java EE 等技术的融合的详细内容,更多请关注php中文网其它相关文章!

Java JNDI 与其他 Java 框架的兼容性:解析 Java JNDI 与其他 Java 框架的兼容性和协作

Java JNDI 与其他 Java 框架的兼容性:解析 Java JNDI 与其他 Java 框架的兼容性和协作

java jndi 与其他 java 框架的兼容性:解析 java jndi 与其他 java 框架的兼容性和协作

Java JNDI 作为 Java 开发中常用的技术,与其他 Java 框架的兼容性一直备受关注。本文从实际应用出发,深入解析了 Java JNDI 与其他 Java 框架的兼容性及协作方式,为开发者提供了全面的指导和解决方案。通过分析不同框架之间的特点和使用方法,帮助开发者更好地理解和运用 Java JNDI 技术,提升开发效率和代码质量。

  • 名称空间集成: JNDI 提供了一个统一的名称空间视图,允许开发人员使用 JNDI 名称来访问各种命名和目录服务中的对象。这使得开发人员能够轻松地将应用程序连接到多个命名和目录服务,而无需担心底层技术细节。
  • 命名服务集成: JNDI 提供了一个统一的接口来访问各种命名服务,例如 LDAP、DNS 和 RMI 注册表。这使得开发人员能够轻松地将应用程序连接到多个命名服务,而无需担心底层的技术细节。
  • 目录服务集成: JNDI 提供了一个统一的接口来访问各种目录服务,例如 LDAP 和 Active Directory。这使得开发人员能够轻松地将应用程序连接到多个目录服务,而无需担心底层的技术细节。
  • 命名对象集成: JNDI 提供了一个统一的接口来访问各种命名对象,例如文件、数据库表和 Java 对象。这使得开发人员能够轻松地将应用程序连接到多个命名对象,而无需担心底层的技术细节。
  • 安全集成: JNDI 提供了一个统一的接口来访问各种安全服务,例如认证和授权。这使得开发人员能够轻松地将应用程序连接到多个安全服务,而无需担心底层的技术细节。

以下是一些演示代码,展示了 JNDI 如何与其他 Java 框架集成:

JNDI 与 LDAP 的集成

import javax.naming.Context;
import javax.naming.InitialContext;

public class JndiLdapExample {

public static void main(String[] args) {
try {
// Create a JNDI context
Context context = new InitialContext();

// Look up the LDAP server
Context ldapContext = (Context) context.lookup("ldap://localhost:389");

// Search the LDAP server for a user
String searchFilter = "(cn=John Doe)";
NamingEnumeration<SearchResult> searchResults = ldapContext.search("", searchFilter, null);

// Print the results of the search
while (searchResults.hasMore()) {
SearchResult searchResult = searchResults.next();
System.out.println(searchResult.getName());
}

} catch (NamingException e) {
e.printStackTrace();
}
}
}
登录后复制

JNDI 与 DNS 的集成

立即学习“Java免费学习笔记(深入)”;

import javax.naming.Context;
import javax.naming.InitialContext;

public class JndiDnsExample {

public static void main(String[] args) {
try {
// Create a JNDI context
Context context = new InitialContext();

// Look up the DNS server
Context dnsContext = (Context) context.lookup("dns://localhost:53");

// Resolve a hostname to an IP address
String hostname = "www.example.com";
String ipAddress = dnsContext.resolve(hostname).toString();

// Print the IP address
System.out.println(ipAddress);

} catch (NamingException e) {
e.printStackTrace();
}
}
}
登录后复制

JNDI 与 RMI 的集成

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.Reference;
import java.rmi.Remote;

public class JndiRmiExample {

public static void main(String[] args) {
try {
// Create a JNDI context
Context context = new InitialContext();

// Create a reference to the RMI object
Reference reference = new Reference(Remote.class.getName(), "com.example.rmi.RemoteImpl", null);

// Bind the reference to the JNDI context
context.bind("rmi://localhost:1099/Remote", reference);

// Look up the RMI object from the JNDI context
Remote remoteObject = (Remote) context.lookup("rmi://localhost:1099/Remote");

// Invoke a method on the RMI object
String result = remoteObject.toString();

// Print the result
System.out.println(result);

} catch (NamingException e) {
e.printStackTrace();
}
}
}
登录后复制

JNDI 与其他 Java 框架的兼容性和协作是其成功的关键因素之一。它使开发人员能够轻松地将应用程序连接到各种命名和目录服务,并利用这些服务的特性和功能来构建强大的、可扩展的应用程序。

>软考高级考试备考技巧/历年真题/备考精华资料" target="_blank">点击免费下载>>软考高级考试备考技巧/历年真题/备考精华资料

以上就是Java JNDI 与其他 Java 框架的兼容性:解析 Java JNDI 与其他 Java 框架的兼容性和协作的详细内容,更多请关注php中文网其它相关文章!

java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结

java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结

     

在 web 开发中,避免不了对日期的操作,就几种常见的日期操作做个总结 (部分参考网络,在此表示感谢):

java.util.Date、Java.util.Calendar、java.sql.Date、java.sql.Time、java.sql.Timestamp

 

java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time

....|__java.security.Timestamp

 

java.util.Date 日期格式为:年月日时分秒 
java.sql.Date 日期格式为:年月日 [只存储日期数据不存储时间数据] 
java.sql.Time 日期格式为:时分秒 
java.sql.Timestamp 日期格式为:年月日时分秒纳秒(毫微秒)

关系:

    java.util.Date 这个类是 java.sql.Date,  java.sql.Time,  java.slq.Timestamp 这三个类的父类。这三个类对 java.util.Date 类进行了包装。

联系:

    java.sql.Date 类屏蔽了 java.util.Date 类的时间有关的方法(形如:hh:mm:ss), 因此,不可以通过这个类访问时间有关的信息,比如,如果你通过 sqlDate.getHour () 方法去访问小时信息,此方法会抛出一个 IllegalArgumentException异常。这是因为java.sql.Date在继承java.util.Date类的时候对父类进行了重写,禁用了时间访问的方法。之所以这么处理,是为了和数据库的Date数据类型相匹配,数据库的Date数据类行只是保存日期有关的字段。

    Java.sql.Time 类屏蔽了 java.util.Date 的日期有关的字段(形如:yyyy-MM-dd), 因此,不能通过这个类访问日期有关的信息,比如:如果你通过 sqlTime.getYear () 方法去获取年有关的信息,此方法会抛出一个 IllegalArgumentException异常。这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

  Java.sql.Timestamp字段则对java.util.Date这个类进行了扩充,它在java.util.Date类的基础上增加了毫秒的时间访问控制,因此,你可以通过 getNanos()方法去获取时间的毫微秒数(注意此处获取的时间是以毫微秒为单位的,1 秒等于十亿毫微秒),同样的,这也是为了和数据库中的 Timestamp 数据类型进行匹配。

理清了上述四个类的关系,那么 java.util.Date 和 java.util.Calendar 类有什么关系呢?

   Java.util.Calendar 类是 java.util.Date 类的一个更加深入,更加全面的替代。Java.util.Calendar 类支持 java.util.Date 的所有功能,此外,Calendar 还引入了多语言,多区域的特性,可以根据需要获取不同区域,不同时区的时间,Calendar 还增加了比 Date 更加方便和快捷的许多操作,如获取一年当中的第几个星期,各个月的天数等便捷的方法。

 

注意:

Java.util.Calendar 区别与 java.util.Date 的几个地方也需要注意一下:首先,Calendar 增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而 java.util.Date 只是精确到秒。其次,Calendar 过去年的时候是当前年份比如:2010,而 Date 获取年份的时获取到的是当前年份 - 1900 的一个值(2010-1900=110,因此,你调用 getYear 后过去的值就是 110)。最后 Calendar 是一个抽象类,之所以能够实例化,是因为此处的 Calendar 充当了一个类似于工厂的作用,在 getInstance 方法中实例化了 Calendar 子类 GregorianCalendar,并把它返回给用户使用。

 

针对不同的数据库选用不同的日期类型 
・Oracle 的 Date 类型,只需要年月日,选择使用 java.sql.Date 类型 
・MS Sqlserver 数据库的 DateTime 类型,需要年月日时分秒,选择 java.sql.Timestamp 类型

 

String 日期格式转换成 Date 日期格式

//java.util.Date 时间格式的转换
    SimpleDateFormat f_utilDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  String str="2011-5-31 14:40:50";
  try {
   java.util.Date utilDate=f_utilDate.parse(str);
   System.out.println(f_utilDate.format(utilDate));
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

    //java.sql.Date 时间格式的转换
    SimpleDateFormat f_sqlDate=new SimpleDateFormat("yyyy-MM-dd");
    java.sql.Date sqlDate = java.sql.Date.valueOf("2010-08-20");
    System.out.println(f_sqlDate.format(sqlDate));
    
    //java.sql.Time sqltime 时间格式的转换
    SimpleDateFormat f_sqlTime=new SimpleDateFormat("hh:mm:ss");
    java.sql.Time sqltime = java.sql.Time.valueOf("13:44:53"); 
    System.out.println(f_sqlTime.format(sqltime));
    
    //java.sql.Timestamp 时间格式的转换
    SimpleDateFormat f_timestamp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2010-08-20 14:06:27.186"); 
    System.out.println(f_timestamp.format(timestamp));

 

 //java.util.Date 转换成 java.sql.Date 格式
       try{
        SimpleDateFormat DateFormate =   new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
               java.util.Date date1 = DateFormate.parse("2011-5-31 14:40:50");
               java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
               System.out.println(DateFormate.format(sqlDate));
       }catch (Exception ex) {
            System.out.println(ex.getMessage());
       }

       //java.sql.Date 转换成 java.util.Date 格式
       java.sql.Date sqlDate1=java.sql.Date.valueOf("2005-12-12");
       java.util.Date utilDate1=new java.util.Date(sqlDate1.getTime());
       System.out.println ("java.sql.Date 转换成 java.util.Date 格式:"+f.format (utilDate1));

    //java.util.Date 转换 java.sql.Timestamp 
    new java.sql.Timestamp (new java.util.Date ().getTime ());// 此处 IDE 报错

    //java.util.Date 转换 java.sql.Time 
    new java.sql.Time(new java.util.Date().getTime());

    

    Timestamp timestamp  = new Timestamp(System.currentTimeMillis());

   我们可以使用 DateFormat 处理字符串来定义时间日期的格式 
   注:String 都是先转换为 java.util.Date,然后再转换成所需的格式

try{   
             String dateString = "2010-08-20 12:00:00.125";    
              DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd kk:mm:ss.SSS",Locale.ENGLISH);// 设定格式   
             dateFormat.setLenient(false);   
             java.util.Date utilDate = dateFormat.parse (dateString);//util 类型   
             java.sql.Timestamp dateTime = new java.sql.Timestamp (utilDate.getTime ());//Timestamp 类型,timeDate.getTime () 返回一个 long 型   
             System.out.println(dateTime);   
        }catch(Exception ex){   
            ex.printStackTrace();   
        }        

 

Java MySQL 数据类型对照

类型名称 显示长度 数据库类型 JAVA 类型 JDBC 类型索引 (int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同 TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91





 

 

对于 bolb,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在 java 中对应 byte[]数组。

 

对 Boolean 类型的解释

mysql 不支持 bool 类型。

1

2

3

4

5

create table xs

(

id int primary key,

bl boolean

)

这样可以创建成功,但检查表结构会发现 mysql 把它替换成 tinyint (1)。

即当把一个数据设置成 bool 类型的时候,数据库会自动转换成 tinyint (1) 的数据类型,其实这个就是变相的 bool。 默认值也就是 1,0 两种,分别对应了 bool 的 true 和 false

在 Java 对应的 POJO 类中,可以根据实际情况使用 java.lang.Boolean 或者 java.lang.Integer。

转自:

http://langgufu.iteye.com/blog/2202744

https://yq.aliyun.com/articles/38115

Java 技术体系 ------JDK、 JRE、 Java ME 、 Java SE 、Java EE

Java 技术体系 ------JDK、 JRE、 Java ME 、 Java SE 、Java EE

以下内容并非原创,来自于深入理解 Java 虚拟机一书:

从广义上讲,Clojure、JRuby、Groovy 等运行与 Java 虚拟机上的语言机器相关的程序都属于 Java 技术体系中的一员,但是仅从传统意义上来看,Sun 官方所定义的 Java 技术体系包括:

  • Java 程序设计语言
  • JavaAPI 类库
  • 运行于各个硬件平台上的虚拟机
  • Class 文件格式
  • 商业机构和开源社区的第三方 Java 类库

 

JDK:

  包括 Java 程序设计语言、JavaAPI 类库、运行于各个硬件平台上的虚拟机,JDK 是用于支持 Java 程序开发的最小环境;

JRE:

       Java API 类库中的 Java SE API 子集和 Java 虚拟机这两部分统称为 JRE,JRE 是支持 Java 程序运行的标准环境。

 

JRE 与 JDK 的区别:

  • JRE 顾名思义是 java 运行时环境,包含了 java 虚拟机,java 基础类库。是使用 java 语言编写的程序运行所需要的软件环境,是提供给想运行 java 程序的用户使用的。
  • JDK 顾名思义是 java 开发工具包,是程序员使用 java 语言编写 java 程序所需的开发工具包,是提供给程序员使用的。JDK 包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具:jconsole,jvisualvm 等工具软件,还包含了 java 程序编写所需的文档和 demo 例子程序。

         如果你需要运行 java 程序,只需安装 JRE 就可以了。如果你需要编写 java 程序,需要安装 JDK。
         JRE 根据不同操作系统(如:windows,linux 等)和不同 JRE 提供商(IBM,ORACLE 等)有很多版本,最常用的是 Oracle 公司收购 SUN 公司的 JRE 版本。

 

如下所示是 Java 技术体系,及 JDK JRE 所涵盖的范围:

 

以上是根据各个组成部分的功能来进行划分的,如果按照技术所服务的领域来划分,或者说按照 Java 技术关注的重点业务领域来划分,Java 技术体系可以分为 4 个平台:

Java Card:

             支持一些 Java 小程序(Applet)运行在小内存设备(如智能卡)上的平台。

Java ME:

            支持 Java 程序运行在移动终端(手机、PDA)上的平台,对 Java API 有所精简,并加入了针对移动终端的支持,这个版本以前称为 J2ME。

Java SE:

            支持面向桌面级应用的 JAVA 平台,提供了完整的 Java 核心 API,这个版本以前称为 J2SE。

Java EE:

           支持使用多层架构的企业应用(如 ERP、CRM 应用)的 Java 平台,除了提供 Java SE API 外,还对其做了大量的扩充,并提供了相关的部署支持,这个版本以前称为 J2EE。      

 

关于Java并发编程:Java Thread方法join的简单总结java并发编程深度解析的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Java JNDI 与其他 Java 技术的协作:揭秘 Java JNDI 与 Java EE 等技术的融合、Java JNDI 与其他 Java 框架的兼容性:解析 Java JNDI 与其他 Java 框架的兼容性和协作、java 中的日期类型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 区别和总结、Java 技术体系 ------JDK、 JRE、 Java ME 、 Java SE 、Java EE等相关知识的信息别忘了在本站进行查找喔。

本文标签: