写了一个混合36进制&26进制算法,若要运行在多线程环境下,怎样保证线程安全和性能?

问题描述

packagealgorithm;/***混合进制计数类*其中最高位(仅一位)为26进制(英文字母表示),除最高位外(共N-1位)用36进制([0~9-A-Z])来表示*/publicclassMixBaseCounter{privatestaticfinalStringBufferbase26=newStringBuffer("ABCDEFGHIJKLMNOPQRSTUVWXYZ");privatestaticStringBuffermixBaseStr=newStringBuffer();//表示36进制的部分,即低位其余的部分privatestaticintdigit=0;//表示整个串的位数如A0001==5,不含最终带后缀的完整串privatestaticLongcount=0L;//计数器(低位)privatestaticIntegerhighCount=0;//高位计数器A==0,初值为0,进位则递增,如B==1protectedstaticLongMaxValue=0L;//根据低位的位数,其临界值相应有不同,低位为3,则MaxValue为46656base36表示为1000,46655为ZZZprivatestaticObjectlockObject=newObject();publicMixBaseCounter(finalintn,charappendix){for(inti=0;i<n+1;i++){mixBaseStr.append("0");}mixBaseStr.setCharAt(0,'A');mixBaseStr.setCharAt(n,appendix);digit=n;//记录下来混合字符串的位数MaxValue=Math.round(Math.pow(36,n-1));//记录base36部分所能表示的最大值}publicstaticStringBuffergetNext(){System.out.print("[Count]"+count+"tt");Stringtmp36=String.valueOf(Long.toString(count,36));//利用36进制表示某个(实际为数字的)字符串if(count.compareTo(MaxValue)<0){mixBaseStr.replace(mixBaseStr.length()-tmp36.length()-1,mixBaseStr.length()-1,tmp36);//右对齐置换尾数操作}elseif(count.compareTo(MaxValue)==0){synchronized(lockObject){highCount++;//需同步}count=0L;//低位计数器清零for(intj=1;j<digit;j++){//低位数字全部清零mixBaseStr.setCharAt(j,'0');}mixBaseStr.setCharAt(0,base26.charAt(highCount));//递增高位}synchronized(lockObject){count++;//需同步}returnmixBaseStr;}publicstaticvoidmain(String[]args){MixBaseCounterm=newMixBaseCounter(3,'_');for(intn=0;n<26*MaxValue;n++){System.out.println(getNext());}}}上述是我写的代码,不过仅能实现初级功能,若想此代码运行在多线程环境下,需要做怎样的修改?

时间: 2024-09-21 06:20:43

写了一个混合36进制&amp;amp;26进制算法,若要运行在多线程环境下,怎样保证线程安全和性能?的相关文章

servlet-错误405,自己写了一个注册页面,可是打不开

问题描述 错误405,自己写了一个注册页面,可是打不开 就是正常的在dynamic web project的webcontent下建了一个page文件夹,然后写了 一个regist.jsp页面,访问的时候就出现 解决方案 不支持get请求,,应该是你的servlet中的doGet()方法没有写 解决方案二: 这是说不支持get请求,你用post请求试试. 解决方案三: servlet里用doPost 解决方案四: servlet里用的都doPost还是doGet? 解决方案五: servlet里

link环境下制作一个《网盘软件》,如何制作不同面额的支付码?

问题描述 link环境下制作一个<网盘软件>,如何制作不同面额的支付码? link环境下制作一个<网盘软件>,如何制作不同面额的支付码? 解决方案 你可以用前缀+流水+校验组成你的支付码.前缀代表不同德面额

在link的环境下制作一个《网盘软件》,如何打开zip文件夹?

问题描述 在link的环境下制作一个<网盘软件>,如何打开zip文件夹? 在link的环境下制作一个<网盘软件>,如何打开zip文件夹? 解决方案 读取zip文件,得到目录结构,你可以用system.io.zipfile类的getfiles方法. 解决方案二: 你网盘对应的文件夹就是数据库里一个目录项数据.看有哪些文件属于这个目录项数据的就可以了 解决方案三: 你网盘对应的文件夹就是数据库里一个目录项数据.看有哪些文件属于这个目录项数据的就可以了

进制转换-java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制

问题描述 java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制 java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制,但是老是运行出错.大神们能不能给个小例子解释一下,谢谢 解决方案 http://blog.csdn.net/vanezuo/article/details/6556768 解决方案二: 使用函数啊,你找一下,Java有相应的函数能做到 解决方案三: 如果你的程序出错,你贴出你的程序才知道. 也可以参考我给你的

Python 26进制计算实现方法

  本文实例讲述了Python 26进制计算方法.分享给大家供大家参考.具体分析如下: 题目是这样的: 假设A=1,B=2,C=3...AA=27,AB=28...AAA=xxx(表示某个数字),写一个函数统计一个字符串的值是多少 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # -*- coding:utf-8 -*- ''''' Created on 2013-3-29 @

JAVA写的四则混合运算

运算 近来用JAVA写了一个小程序,不敢独享.这是一个四则混合运算程序,没什么做优化,也没做什么注释,(人啊,总喜欢偷懒的.) 这个版本我已经定为了2.21版本.呵呵. 从最先的1.0到2.0的改动很大.除了运算思想没动处,其它的都在2.0做了重新设计. 这种程序其实网上一大把(算法也好得多).此仅为无聊找点事情做而已. /***四则混合运算程序*作者:黄剑武*时间:2005年4月29日*版本:2.21*修改日志:2.0* 1.更改表达式用户输入方式.* 2.对用户输入的表达式进行有效性字符过滤

Python写的一个简单监控系统

  这篇文章主要介绍了Python写的一个简单监控系统,本文讲解了详细的编码步骤,并给给出相应的实现代码,需要的朋友可以参考下 市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库"falcon",建表语句如下: ? 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `stat` ( `

javascript写的一个模拟阅读小说的程序

 这篇文章主要介绍了用javascript写了一个模拟阅读小说的程序,需要的朋友可以参考下  代码如下: <html>  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />  <head>  <title></title>  <script type="text/javascript"> 

c#-c++写的一个简单学生信息管理系统,求助。

问题描述 c++写的一个简单学生信息管理系统,求助. 编译不报错,就是运行不出来 #include<iostream.h> #include<stdio.h> #include<string.h> class student//定义学生信息类 {public: char name[20]; char num[10]; char banji[20]; int math,english,chinese,computer; int sum; double ave; void