首页 文章 精选 留言 我的

精选列表

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

Java并发编程 -- 线程安全、优先级设定

优先级设定 一个合理的优先级可以在一定条件下避免一些活跃性问题,比如死锁、饥饿等 public class Task implements Runnable{ @Override public void run() { while (true) { System.out.println(Thread.currentThread().getName() + "线程执行了..."); } } } public class PriorityTest { public static void main(String[] args) { Thread t1 = new Thread(new Task()); Thread t2 = new Thread(new Task()); /** * 设置优先级 * MAX_PRIORITY=10 * MIN_PRIORITY=1 * NORM_PRIORITY=5 */ t1.setPriority(Thread.NORM_PRIORITY); t2.setPriority(Thread.MAX_PRIORITY); t1.start(); t2.start(); } } 线程安全问题解决 当多个线程在非原子处理下操作相同的资源时,难免出现资源的混乱。 我在这里举个value++的例子。 无线程安全时 public class Task{ public int value = 0; // 没有处理线程安全 public int getValue() { return value++; } public static void main(String[] args) { Task task = new Task(); new Thread(){ @Override public void run() { while (true) { System.out.println(Thread.currentThread().getName() + " " + task.getValue()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); new Thread(){ @Override public void run() { while (true) { System.out.println(Thread.currentThread().getName() + " " + task.getValue()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } } image.png 我们会发现2和5有重复。这是jvm底层的问题,我在后文有分析。 处理线程安全 如果我们给线程加锁,将其变成原子处理,就会解决该问题。 public synchronized int getValue() { return value++; } 既在修饰符后加上synchronized关键字。 image.png 但是又有一个问题,这样的话,其实原理上是串行处理的,那我们该如果解决这个问题呢。

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

Java中,权限修饰符的权限测试

============================================================================= 1、 1 /* 2 权限修饰符的权限测试: 3 4 权限修饰符 本类中 同一个包下的子类和无关类 不同包下的子类 不同包下的无关类 5 private Yes No No No 6 默认 Yes Yes No No 7 protected Yes Yes Yes No 8 public Yes Yes Yes Yes 9 */ 10 11 package com.liuyi; 12 13 class Father { 14 private void show() { 15 System.out.println("show"); 16 } 17 18 void show2() { 19 System.out.println("show2"); 20 } 21 22 protected void show3() { 23 System.out.println("show3"); 24 } 25 26 public void show4() { 27 System.out.println("show4"); 28 } 29 30 public static void main(String[] args) { 31 Father f = new Father(); 32 f.show(); 33 f.show2(); 34 f.show3(); 35 f.show4(); 36 } 37 } 在本类中,测试结果为: ============================================================================= 2、 1 /* 2 权限修饰符的权限测试: 3 4 权限修饰符 本类中 同一个包下的子类和无关类 不同包下的子类 不同包下的无关类 5 private Yes No No No 6 默认 Yes Yes No No 7 protected Yes Yes Yes No 8 public Yes Yes Yes Yes 9 */ 10 11 package com.liuyi; 12 13 class Father { 14 private void show() { 15 System.out.println("show"); 16 } 17 18 void show2() { 19 System.out.println("show2"); 20 } 21 22 protected void show3() { 23 System.out.println("show3"); 24 } 25 26 public void show4() { 27 System.out.println("show4"); 28 } 29 } 1 package com.liuyi; 2 3 class Son extends Father { 4 public static void main(String[] args) { 5 Father f = new Father(); 6 //f.show(); 7 f.show2(); 8 f.show3(); 9 f.show4(); 10 System.out.println("--------------"); 11 12 Son s = new Son(); 13 //s.show(); 14 s.show2(); 15 s.show3(); 16 s.show4(); 17 } 18 } 在同一包下的子类中,测试结果为:(注意:在子类代码中分别测试了父类和子类) ============================================================================= 3、 1 /* 2 权限修饰符的权限测试: 3 4 权限修饰符 本类中 同一个包下的子类和无关类 不同包下的子类 不同包下的无关类 5 private Yes No No No 6 默认 Yes Yes No No 7 protected Yes Yes Yes No 8 public Yes Yes Yes Yes 9 */ 10 11 package com.liuyi; 12 13 class Father { 14 private void show() { 15 System.out.println("show"); 16 } 17 18 void show2() { 19 System.out.println("show2"); 20 } 21 22 protected void show3() { 23 System.out.println("show3"); 24 } 25 26 public void show4() { 27 System.out.println("show4"); 28 } 29 } 1 package com.liuyi; 2 3 class Test { 4 public static void main(String[] args) { 5 Father f = new Father(); 6 //f.show(); 7 f.show2(); 8 f.show3(); 9 f.show4(); 10 } 11 } 在同一包下的无关类中,测试结果为: ============================================================================= 4、 1 /* 2 权限修饰符的权限测试: 3 4 权限修饰符 本类中 同一个包下的子类和无关类 不同包下的子类 不同包下的无关类 5 private Yes No No No 6 默认 Yes Yes No No 7 protected Yes Yes Yes No 8 public Yes Yes Yes Yes 9 */ 10 11 package com.liuyi; 12 13 public class Father { 14 private void show() { 15 System.out.println("show"); 16 } 17 18 void show2() { 19 System.out.println("show2"); 20 } 21 22 protected void show3() { 23 System.out.println("show3"); 24 } 25 26 public void show4() { 27 System.out.println("show4"); 28 } 29 } 1 package cn.qx; 2 3 import com.liuyi.Father; 4 5 public class Son2 extends Father { //Father在com.liuyi中不是公共的,无法从外部程序包中对其进行访问,需要在class Father前面加public修饰。 6 public static void main(String[] args) { //为了简便起见,以后所有的类的前面都加public修饰。 7 Father f = new Father(); 8 //f.show(); 9 //f.show2(); 10 //f.show3(); 11 f.show4(); 12 System.out.println("--------------"); 13 14 Son2 s = new Son2(); 15 //s.show(); 16 //s.show2(); 17 s.show3(); 18 s.show4(); 19 } 20 } 在不同包下的子类中,测试结果为:(注意:在子类代码中分别测试了父类和子类) ============================================================================= 5、 1 /* 2 权限修饰符的权限测试: 3 4 权限修饰符 本类中 同一个包下的子类和无关类 不同包下的子类 不同包下的无关类 5 private Yes No No No 6 默认 Yes Yes No No 7 protected Yes Yes Yes No 8 public Yes Yes Yes Yes 9 */ 10 11 package com.liuyi; 12 13 public class Father { 14 private void show() { 15 System.out.println("show"); 16 } 17 18 void show2() { 19 System.out.println("show2"); 20 } 21 22 protected void show3() { 23 System.out.println("show3"); 24 } 25 26 public void show4() { 27 System.out.println("show4"); 28 } 29 } 1 package cn.qx; 2 3 import com.liuyi.Father; 4 5 class Test2 { 6 public static void main(String[] args) { 7 Father f = new Father(); 8 //f.show(); 9 //f.show2(); 10 //f.show3(); 11 f.show4(); 12 } 13 } 在不同包下的无关类中,测试结果为: =============================================================================我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

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

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册