首页 文章 精选 留言 我的

精选列表

搜索[Java框架],共10000篇文章
优秀的个人博客,低调大师

Java HttpSession 详解

HttpSession 是一个用户的session。session包含了用户信息。 当用户第一次访问网站时,有一个唯一的ID明确他的身份,这个ID保存在cookie或者一个请求参数里。 我们可以这样来获得session信息: protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); } 我们也可以保存这个session信息,以方便后面的读取。 session.setAttribute("userName", "theUserName"); 既然我们保存了session,那怎么获取保存的session呢? String userName = (String) session.getAttribute("userName"); 这些session是保存在servlet容器中。 session丢失问题处理 当我们的网站有多个不通的项目服务时,用户请求别的项目服务会存在session找不到的问题,有几个######解决办法: 不使用session。 将session保存到数据库,然后别的服务来获取。 用粘性的session,就是让用户的请求统一发到同一个服务器来处理。

优秀的个人博客,低调大师

JAVA 线程Join

join方法: 当某个线程要等待另一个线程执行结束后才能继续执行时,使用join方法。 public class DinnerThread { public static void main(String[] args){ DinnerThread thread = new DinnerThread(); Dinner fatherThread = thread.new Dinner(); Thread myThread = new Thread(fatherThread); myThread.start(); } public class Dinner implements Runnable { public void run() { System.out.println("去饭店吃饭"); System.out.println("点完菜让饭店做菜:"); Thread restaurantThread = new Thread(new RestaurantThread()); restaurantThread.start(); try { restaurantThread.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("开始吃饭"); } } public class RestaurantThread implements Runnable{ public void run() { System.out.println("饭店开始做菜"); for(int i=0;i<10;i++){ System.out.println("饭店做菜("+(i+1)+")..."); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("饭店上菜"); } } } 打印结果如下: 去饭店吃饭点完菜让饭店做菜:饭店开始做菜饭店做菜(1)...饭店做菜(2)...饭店做菜(3)...饭店做菜(4)...饭店做菜(5)...饭店做菜(6)...饭店做菜(7)...饭店做菜(8)...饭店做菜(9)...饭店做菜(10)...饭店上菜开始吃饭

优秀的个人博客,低调大师

分析Java AtomicInteger

为了解决多线程访问Integer变量导致结果不正确所设计的一个基于多线程并且支持原子操作的Integer类 AtomicInteger内部有一个变量UnSafe: Unsafe类是一个可以执行不安全、容易犯错的操作的一个特殊类 虽然Unsafe类中所有方法都是public的,但是这个类只能在一些被信任的代码中使用。 Unsafe类可以执行以下几种操作 分配内存,释放内存:在方法allocateMemory,reallocateMemory,freeMemory中,有点类似c中的malloc,free方法 可以定位对象的属性在内存中的位置,可以修改对象的属性值。使用objectFieldOffset方法 挂起和恢复线程,被封装在LockSupport类中供使用 AtomicInteger中用的就是Unsafe的CAS操作 Unsafe中的int类型的CAS操作方法 public final native boolean compareAndSwapInt(Object o, long offset,int expected,int x); 如果我把1这个数字属性更新到2的话,需要这样调用: compareAndSwapInt(this, valueOffset, 1, 2) valueOffset字段表示内存位置,可以在AtomicInteger对象中使用unsafe得到: ` value表示当前的整型值,这个整型变量还是volatile的,保证内存可见 AI内部还封装了一下CAS,定义了一个compareAndSet方法,只需要2个参数 addAndGet方法 内部使用一个死循环,先得到当前的值value,然后再把当前的值加一,加完之后使用cas原子操作让当前值加一处理正确。当然cas原子操作不一定是成功的,所以做了一个死循环,当cas操作成功的时候返回数据。这里由于使用了cas原子操作,所以不会出现多线程处理错误的问题。 比如线程A得到current为1,线程B也得到current为1 线程A的next值为2,进行cas操作并且成功的时候,将value修改成了2 这个时候线程B也得到next值为2,当进行cas操作的时候由于expected值已经是2,而不是1了 所以cas操作会失败,下一次循环的时候得到的current就变成了2 也就不会出现多线程处理问题了 incrementAndGet方法 跟addAndGet方法类似,只不过next值变成了current+1: getAndAdd方法 跟addAndGet方法一样,返回值变成了current: 缺点 虽然AtomicInteger中的cas操作可以实现非阻塞的原子操作,但是会产生ABA问题,

优秀的个人博客,低调大师

Java 进制转换

阅读目录 示例 扩展 回到顶部 示例 int n1 = 14; //十进制转成十六进制: Integer.toHexString(n1); //十进制转成八进制 Integer.toOctalString(n1); //十进制转成二进制 Integer.toBinaryString(12); //十六进制转成十进制 Integer.valueOf("FFFF",16).toString(); //十六进制转成二进制 Integer.toBinaryString(Integer.valueOf("FFFF",16)); //十六进制转成八进制 Integer.toOctalString(Integer.valueOf("FFFF",16)); //八进制转成十进制 Integer.valueOf("576",8).toString(); //八进制转成二进制 Integer.toBinaryString(Integer.valueOf("23",8)); //八进制转成十六进制 Integer.toHexString(Integer.valueOf("23",8)); //二进制转十进制 Integer.valueOf("0101",2).toString(); //二进制转八进制 Integer.toOctalString(Integer.parseInt("0101", 2)); //二进制转十六进制 Integer.toHexString(Integer.parseInt("0101", 2)); 回到顶部 扩展 十六进制转二进制 public String hexString2binaryString(String hexString) { int deVal = Integer.valueOf(hexString, 16); return Integer.toBinaryString(deVal); } 本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/8064010.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册