环境变量浅析

1. 环境变量,系统变量和用户变量
  • 1.1. 环境变量包含系统变量和用户变量;
  • 1.2. 系统变量针对该操作系统下所有用户起效;
  • 1.3. 用户变量只针对当前用户起效;
2. PATH:系统变量。

当我们在命令行窗口敲出javac时,操作系统要怎么打印出如下信息呢?
javac
思路分析:

  • 2.1. 操作系统肯定时执行了某个程序(windows为.exe文件,Linux时.sh文件),才能打印出这些信息;
  • 2.2. 操作系统要怎么找到这个程序呢?盖茨爸爸说过以下的话:
1.操作系统首先在当前目录下找当前要执行的文件(本例中的javac.exe不在当前目录),找到即可执行;
2.如果当前目录找不到,则应该去系统变量所记录的所有目录下一一查找,找到即可执行(本例中的javac.exe配在了path目录下了);
3.如果在以上三个目录都找不到,那操作系统就撒个娇,报个错好了~

注意事项:

  • 2.3. 我们加到path目录下的时bin目录,不是java文件夹目录,因为所有的可执行文件都在bin目录下呀,在java目录操作系统是扫描不到可执行文件的。
  • 2.4. 我们也可以在命令行使用可执行文件的全路径名来执行程序(路径名字不能有空格,若有空格需要加双引号):
    路径中有空格
    带有空格的路径使用双引号包了起来
  • 2.5. 豆知识: Program Files 也可以写成 Progra~1。
3.ClassPath:
  • 3.1. 当java程序执行一些.class文件,.jar文件(.jar包中包含的是编译好的.class文件),ClassPath需要告诉java程序,在哪里路径下可以找到这些文件;

  • 3.2. 和Path不同的是,当java程序需要寻找.class文件,.jar文件时,不会从当前目录查找,而是直接扫描ClassPath;

  • 3.3. 若要java程序运行当前目录下的.class文件,可以在class文件前加./表示当前路径;

  • 3.4. ClassPath下配置的路径以分号分隔开来;

  • 3.5.多个应用可能有同名的.class文件,而java程序扫描时是在 ClassPath所配置的路径列表下从左到右扫描,执行扫描到的第一个文件,所以可能导致结果出错,所以在IDEA等应用程序中,不需要人为手动设定CLASSPATH系统变量,而只设定当前程序的特定的CLASSPATH系统变量,这样便不会影响到其他程序的运行。

  • 这里可以写一个实例的,有空写一下。

4.JAVA_HOME:
  • 4.1. JAVA_HOME并不是Java运行需要的参数,而是提供给第三方工具使用的参数,第三方工具可以使用JAVA_HOME来寻找需要的java程序;
  • 4.2.使用步骤:第三方工具可以在自己的配置文件里使用%JAVA_HOME%/bin,即可执行java的bin目录下所有的程序了,而且以后Java的安装目录变更了,只要在系统变量的JAVA_HOME下同步新的安装目录,第三方工具不需要改动任何配置,依然可以使用新的java路径的bin目录下所有的程序。

参考博客(喜欢这个作者遣词造句,很好玩):https://blog.csdn.net/u011513853/article/details/52865076
oracle官方文档:http://https//docs.oracle.com/javase/tutorial/essential/environment/paths.html

  • oracle官方文档那个链接已经打不开了,回头可以找一下这个文档看一下。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ThreadLocal 是 Java 中的一个类,它提供了一种线程局部变量的机制。线程局部变量是指每个线程都有自己的变量副本,每个线程对该变量的访问都是独立的,互不影响。 ThreadLocal 主要用于解决多线程并发访问共享变量时的线程安全问题。在多线程环境下,如果多个线程共同访问同一个变量,可能会出现竞争条件,导致数据不一致或者出现线程安全问题。通过使用 ThreadLocal,可以为每个线程提供独立的副本,从而避免了线程安全问题。 ThreadLocal 的工作原理是,每个 Thread 对象内部都维护了一个 ThreadLocalMap 对象,ThreadLocalMap 是一个 key-value 结构,其中 key 是 ThreadLocal 对象,value 是该线程对应的变量副本。当访问 ThreadLocal 的 get() 方法时,会根据当前线程获取到对应的 ThreadLocalMap 对象,并从中查找到与 ThreadLocal 对象对应的值。如果当前线程尚未设置该 ThreadLocal 对象的值,则会通过 initialValue() 方法初始化一个值,并将其存入 ThreadLocalMap 中。当访问 ThreadLocal 的 set() 方法时,会将指定的值存入当前线程对应的 ThreadLocalMap 中。 需要注意的是,ThreadLocal 并不能解决共享资源的并发访问问题,它只是提供了一种线程内部的隔离机制。在使用 ThreadLocal 时,需要注意合理地使用,避免出现内存泄漏或者数据不一致的情况。另外,由于 ThreadLocal 使用了线程的 ThreadLocalMap,因此在使用完 ThreadLocal 后,需要手动调用 remove() 方法清理对应的变量副本,以防止内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值