java编写静态工具类_Java编程中静态内部类与同步类的写法示例

java静态内部类

将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起各位程序开发人员的注意。

(一)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员。

(二)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法。

(三)在一个类中创建非静态成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。然后要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。即在创建静态类内部对象时,不需要其外部类的对象。

java在实现LinkedList时使用了如下内部类:

public class LinkedList

extends AbstractSequentialList

implements List, Deque, Cloneable, java.io.Serializable

{

........

private static class Entry {

E element;

Entry next;

Entry previous;

Entry(E element, Entry next, Entry previous) {

this.element = element;

this.next = next;

this.previous = previous;

}

}

private Entry addBefore(E e, Entry entry) {

Entry newEntry = new Entry(e, entry, entry.previous);

newEntry.previous.next = newEntry;

newEntry.next.previous = newEntry;

size++;

modCount++;

return newEntry;

}

........

}

这里即静态内部类的典型用法

java同步工具类

/**

* 需要启动多个线程把接口数据分批导入目标,要求

* 每次执行的时候必须保证前一次任务已结束,处理这个需求的方式有很多种,其实质即

* 线程间同步问题,正好这两天我也在关注线程同步相关的东东,jdk提供了不少的线程

* 同步工具类,CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的

* 操作之前,它允许一个或多个线程一直等待。

* 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,

* await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。

* 这种现象只出现一次——计数无法被重置(这点很重要哦)。如果需要重置计数,请考虑使用 CyclicBarrier。

* 下面是一个简单的例子来模拟该需求,当然可能因为为了模拟场景,会有一些不合理的地方,这里主要阐述

* CountDownLatch同步,关于CountDownLatch的源码将在后面来分析,其主要涉及AbstractQueuedSynchronizer

* 这个类,他的类容相对比较复杂

* **/

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.concurrent.CountDownLatch;

public class Driver {

static List strList = null;

int k = 0;

static {

//模拟数据

strList = new ArrayList();

for (int i = 0; i < 50; i++) {

strList.add(i);

}

}

public static void main(String args[]) {

boolean isEnd = true;

//为了验证正确性,只执行20次

int count=0;

Driver d = new Driver();

while (isEnd && strList.size() > 0&&count<20) {

CountDownLatch startSignal = new CountDownLatch(1);

final CountDownLatch doneSignal = new CountDownLatch(5);

for (int i = 0; i < 5; ++i)

{

new Thread(d.new Worker(startSignal, doneSignal,i)).start();

}

//计数减1 子线程Worker可以执行

startSignal.countDown();

try {

new Thread(new Runnable() {

Random r = new Random();

@Override

public void run() {

try {

//主线程阻塞 知道所有子线程将doneSignal清零

doneSignal.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

while(strList.size()<=0){

int pos = r.nextInt(1000);

strList.clear();

for (int i = pos; i < pos + 50; i++) {

strList.add(i);

}

}

}

}).start();

isEnd = true;

} catch (Exception e) {

e.printStackTrace();

}

count++;

}

}

class Worker implements Runnable {

private final CountDownLatch startSignal;

private final CountDownLatch doneSignal;

private int i;

Worker(CountDownLatch startSignal, CountDownLatch doneSignal,int i) {

this.startSignal = startSignal;

this.doneSignal = doneSignal;

this.i=i;

}

public void run() {

try {

// 等待主线程执行countDown

startSignal.await();

doWork();

//计数减1

doneSignal.countDown();

} catch (InterruptedException ex) {

} // return;

}

void doWork() {

synchronized (strList) {

int start=(i)*(50/5);

int end=(i+1)*(50/5);

for (int i = start; i < end; i++) {

System.out.println(strList.get(i) + "---" + "已被删除");

}

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python流量实时统计_Python实现获取nginx服务器ip及流量统计信息功能示例

本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#!/usr/bin/python#codingutf8log_file "/usr/local/nginx/logs/access.log"with open(log_file) as f:contexts f.readlines()# define ip d…

java实验1机动车实验目的_《Java程序设计》实验指导书.doc

《Java程序设计》实验指导书实验一、熟悉JDK环境及主要命令一、实验目的1) 熟悉JDK的环境配置2) 掌握JDK的命令3) 掌握Java Application程序的开发过程&#xff0c;并编写一个Java Application程序二、实验内容1&#xff0e;按照上课所学知识&#xff0c;为自己的机器配置环境变…

python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单

很多selenium学习者被浏览器弹出的文件上传、下载框折磨的痛不欲生&#xff0c;今天博主就带你们轻松搞定上传和下载问题。上传上传弹框文件上传是所有UI自动化测试都要面对的一个头疼问题&#xff0c;要处理这个问题&#xff0c;我们需要&#xff1a;首先&#xff0c;要区分出…

mysql vim 命令_Vim基本命令必知必会

光标移动定位方式hjkl (强例推荐使用其移动光标&#xff0c;但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头0 → 数字零&#xff0c;到行首^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格&#xff0c;tab&#xff0c;换行&#xff0c;回车等)$ →…

python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...

python3.4.3如何转换str字符串&#xff1f;#codingutf8import pymssqlclass MSSQL:def __init__(self,host,user,pwd,db):self.host hostself.user userself.pwd pwdself.db dbdef __getConnect(self):"""得到连接信息返回&#xff1a; conn.cursor()"…

java中strictfp么意思_什么时候应该在java中使用“strictfp”关键字?

Strictfp确保您从每个平台上的浮点计算获得完全相同的结果。如果不使用strictfp&#xff0c;JVM实现可以在可用的地方使用额外的精度。Within an FP-strict expression, allintermediate values must be elementsof the float value set or the doublevalue set, implying that…

python导入包的输入法_python 模块和包的导入

http://www.cnblogs.com/linhaifeng/articles/6379069.html1,模块开源模块https://pypi.python.org/pypipip/ easy_install安装python setup.py buildpython setup.py installpip install xxxx添加环境变量import os,sysprint (os.path.dirname(os.path.dirname(os.path.dirnam…

java 包权限 子包_Java 包和访问权限

一开始学Java&#xff0c;就用的eclipse。对包的印象就是右键新建而已。至于导入包&#xff0c;等报错了再导。被IDE奴役的傻孩子。现在就清晰地梳理一遍吧~本文基于Mars老师的Java4Android视频。包的作用软件包为Java类提供了命名空间。根据包名&#xff0c;会生成相应的文件夹…

python动态表情包下载_Python从eif中导出qq表情的gif图片

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#!/usr/bin/pythonTestfrom sys import stdoutfrom time import sleepffile(t.eif,rb)resultDirresultreadBytesreadingBytetempArr3[,,]tempArr8[,,,,,,,]#End Of Gif In EifstartFlag[\x47,\x49,\x46]endFlag1list(49454E44AE426…

java中dll在cas中不生效_java中你所不知道的CAS操作

1.CAS是什么Compare and Swap(比较并操作)&#xff0c;由处理器架构支持&#xff0c;语义是如果当前值V和旧值A相同&#xff0c;则将当前值修改为B&#xff0c;如果不相同则不修改。CAS操作采用的是乐观锁技术&#xff0c;当多线程同时修改某个变量时只有一个成功&#xff0c;其…

内存条上面参数详解_为什么买内存条要看时序?别以为内存频率高性能就好

2016年开网吧买了400多根DDR4 8G内存条&#xff0c;一根180。2017年网吧赔了钱&#xff0c;我把电脑卖了&#xff0c;内存600一根&#xff0c;结果开网吧的钱赚回来了。囤内存挣回了开网吧的钱转眼间到2019年&#xff0c;内存就跌回了原来的价钱&#xff0c;200多块就又能买到D…

java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...

玩家类&#xff1a;package playingCardsGame;import java.util.ArrayList;import java.util.List;/** 玩家类*/public class Players {int ID;String name;List handCards;Players(int ID, String name){this.ID ID;this.name name;this.handCards new ArrayList();}}手牌类…

android 获取monkey日志_Android压力测试:monkey压力测试实战

主要分享的主题是 Android App 专项测试&#xff0c;通过 monkey 进行压力测试。一.测试步骤1.安装ADB2.连接被测手机和电脑3.打开CMD命令行4.输入monkey命令adb shell monkey -p your.package.name?--pct-touch 30?--ignore-crashes ?--ignore-timeouts--throttle 250?-s …

java工程怎么构造成moven_将普通java工程结构改为由maven管理的工程结构域

第一次尝试些博客记录一下自己的学习心得!1. http://maven.apache.org/download.cgi 这是maven 的下载链接进入链接下载一个maven 包这是我的windows10 系统下载的版本2 . 将下载好的文件解压后放入任意位置(一般建议放到自己常用的文件夹下边)并记住该路径G:\xiangmuwar …

php mysql 聊天室_聊天室phpmysql(一)

//第一个页面 name"index1.php"include "../signup/mysql.php";$time1time();//$userid983530409;echo $n;if($n1){$useridtime();$nick"g".$userid;$last_time$userid;$sql"insert into chat_user (userid,id,last_time) values ($us…

在python中求小于100的所有合数_python输出100以内的质数与合数

__author__ Yue Qingxuan# -*- coding: utf-8 -*-#求质数p[2]for i in range(2,101):for temp in range(2,i):if i%temp0:breakprint(i,i,temp,temp)elif tempi-1:p.append(i)print(\n以下打印质数&#xff1a;)print(p)#求合数list[]for i in range (4,100):for j in range(2…

python 函数进度条怎么_刷新你对进度条的认识,用python写出不一样的进度条

1 简介在日常工作中&#xff0c;我们运行程序经常会用到「循环迭代」&#xff0c;假如这个执行时间很短&#xff0c;那倒也无所谓。但是有一些过程耗时蛮长的&#xff0c;给其加上「进度条」(progress bar)&#xff0c;可以帮我们监控代码执行进度&#xff0c;以及过程出现异常…

acer软件保护卡清除工具clear_使用Windows 10内置工具释放硬盘空间的最佳方法

如果您的磁盘空间不足&#xff0c;可以使用 Windows 10 中内置的工具来清理垃圾文件、应用程序和游戏等&#xff0c;以优化硬盘空间。使用这些清理工具不仅能够释放空间&#xff0c;而且还有助于提高系统性能。下面小编就为大家汇总介绍 几种种最佳快捷方法&#xff0c;来释放 …

python中astr是啥_python的基本操作

该来的还是来了&#xff0c;早先某个大胖子建议我写关于python基本操作的博客&#xff0c;当时没上心&#xff0c;现在来补点账&#xff0c;也姑且算是对往昔一点回忆吧。对了&#xff0c;那胖子&#xff0c;姓王&#xff0c;所幸不住我隔壁。闲言少叙&#xff0c;python和pych…

python字典popitem和pop_python字典popitem_python 字典之pop() and popitem()

字典删除方法&#xff1a;pop()和popitem()&#xff0c;这两种种方法的作用不同&#xff0c;操作方法及返回值都不相同。pop (key[,default])其中&#xff0c;key是必选参数&#xff0c;必须给出&#xff0c;default是可选参数&#xff0c;可以不给出。如果键值key在字典中存在…