黑马程序员技术交流社区
标题:
[原创]一个利用多线程获取随机字符串的小程序
[打印本页]
作者:
cat73
时间:
2014-6-20 18:12
标题:
[原创]一个利用多线程获取随机字符串的小程序
本帖最后由 cat73 于 2014-7-23 23:17 编辑
刚刚学到多线程,就有了个思路,因为线程的切换是随机的,那么可不可以用这种方法来获取随机字符串呢?
于是就开始写了,最后也成功的写出来了,由于初学,代码或许略有些乱,见谅.
本代码可以用于获得一个随机的字符串
优点:几乎不可能被预测
缺点:效率较低,随机性较差,经常出现一些连续的字符
PS.如果你复制后空格都没了,建议复制到eclipse里使用自动整理功能整理一下再看
同时希望能得到各位的宝贵意见~~
package tk.cat73.hm.h127.Thread;
/**
* 利用多线程的原理获取一段随机字符串
* 优点:几乎不可能被预测
* 缺点:效率较低,随机性较差,经常出现一些连续的字符
* @author Cat73
*/
class RandString {
private String rand;
private void addrand(char r) {
synchronized (this) {
rand += r;
}
}
class Tmp extends Thread {
char r;
int len;
Tmp(char r, int len) {
this.r = r;
this.len = len;
}
public void run() {
for (int i = 0; i < len; i++)
addrand(r);
}
}
/**
* 获取一段随机字符串
* @param len 要获得的字符串长度
* @param keys 要在返回的字符串中出现的字符
* @return 返回随机的字符串结果
*/
public String getRand(int len, char[] keys) {
rand = "";
int lenForTmp = (int) (len * 1.5 / keys.length + 20);
Tmp[] t = new Tmp[keys.length];
for (int i = 0; i < keys.length; i++)
t[i] = new Tmp(keys[i], lenForTmp);
for (int i = 0; i < keys.length; i++)
t[i].start();
try {
for (int i = 0; i < keys.length; i++)
t[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(rand.length());
return rand.substring(rand.length() / 3, rand.length() / 3 + len);
}
}
public class Thread_128 {
public static void run() {
RandString r = new RandString();
char[] str = { '0', '1', '2', '3' };
String rand = r.getRand(500, str);
System.out.println(rand);
System.out.println(rand.length());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2