功能要求:

具体类:

Decrypt  测试类,用来启动破解和日志线程

DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解

LogThread 日志类,将输出每次生成的字符串结果集,并且设置为守护线程,等DecryptThread线程运行结束,也将停止运行

package decrypt;

import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class Decrypt { // 生成长度为3的随机字符串
private static String getRandomStr() {
char []chs = new char[3];
Random rd = new Random();
for(int i=0;i<3;i++) {
// 生成 [0,10) 的数
chs[i] =(char) (rd.nextInt(10)+'0');
}
return new String(chs);
} public static void main(String[] args) {
String password = getRandomStr();
List<String> list = new ArrayList<String>();
DecryptThread dec = new DecryptThread(list, password);
LogThread log = new LogThread(list);
dec.start();
log.start();
} }

decrypt类

package decrypt;

import java.util.List;
import java.util.ArrayList; public class DecryptThread extends Thread {
boolean ok = false;
private List<String> list;
private String password;
public DecryptThread() {}
public DecryptThread(List<String> list,String password) {
this.list = list;
this.password = password;
} @Override
public void run() {
char []chs = new char[3];
String str=null;
for(int i=0;i<=9;i++) {
for(int j=0;j<=9;j++) {
for(int k=0;k<=9;k++) {
chs[0]=(char)(i+'0');
chs[1]=(char)(j+'0');
chs[2]=(char)(k+'0');
str = new String(chs);
list.add(str);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(str.equals(password)) {
System.out.printf("成功匹配到密码,密码是%s%n",str);
ok=true;
return ;
}
}
}
}
}
}

DecryptThread类

package decrypt;

import java.util.List;
import java.util.ArrayList; public class LogThread extends Thread{
private List<String> list;
LogThread(){} LogThread(List<String> list) {
this.list = list;
// 日志线程设置为 守护线程
this.setDaemon(true);
} @Override
public void run() {
while(true) {
while (list.isEmpty()) {
try {
Thread.sleep(50);
}catch(Exception e) {
e.printStackTrace();
}
}
String password = list.remove(0);
System.out.printf("生成的字符串是%s%n", password);
}
} }

LogThread

可改进功能:

  1.字符串长度增加,并且不仅有数字还有字母以及 特殊字符

  2.可以将log日志得到的结果 输出到文件,通过缓存来减少IO次数

  3.可以将正确密码 加密 存到 数据库中,练习数据库的操作

  4.暂时还没想到,嘿嘿

Java 多线程 破解密码 demo的更多相关文章

  1. Java 多线程异步处理demo

    java中实现多线程 1)继承Thread,重写里面的run方法 2)实现runnable接口通过源码发现:第一种方法说是继承Tread然后重写run方法,通过查看run方法的源码,发现run方法里面 ...

  2. java多线程的简单demo

    模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...

  3. java多线程并发执行demo,主线程阻塞

    其中有四个知识点我单独罗列了出来,属于多线程编程中需要知道的知识: 知识点1:X,T为泛型,为什么要用泛型,泛型和Object的区别请看:https://www.cnblogs.com/xiaoxio ...

  4. java 多线程断点下载demo

    源码链接 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java ...

  5. java多线程(八)-死锁问题和java多线程总结

    为了防止对共享受限资源的争夺,我们可以通过synchronized等方式来加锁,这个时候该线程就处于阻塞状态,设想这样一种情况,线程A等着线程B完成后才能执行,而线程B又等着线程C,而线程C又等着线程 ...

  6. java多线程(七)-线程之间的 协作

    对于多线程之间的共享受限资源,我们是通过锁(互斥)的方式来进行保护的,从而避免发生受限资源被多个线程同时访问的问题.那么线程之间既然有互斥,那么也会有协作.线程之间的协作也是必不可少的,比如 盖个商场 ...

  7. java多线程(五)-访问共享资源以及加锁机制(synchronized,lock,voliate)

    对于单线程的顺序编程而言,每次只做一件事情,其享有的资源不会产生什么冲突,但是对于多线程编程,这就是一个重要问题了,比如打印机的打印工作,如果两个线程都同时进行打印工作,那这就会产生混乱了.再比如说, ...

  8. java多线程(四)-自定义线程池

    当我们使用 线程池的时候,可以使用 newCachedThreadPool()或者 newFixedThreadPool(int)等方法,其实我们深入到这些方法里面,就可以看到它们的是实现方式是这样的 ...

  9. java多线程(三)-Executors实现的几种线程池以及Callable

    从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...

随机推荐

  1. HDU 1068 Girls And Boys 二分图题解

    版权声明:本文作者靖心.靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  2. 【SVM】A Practical Guide to Support Vector Classi cation

    零.简介 一般认为,SVM比神经网络要简单. 优化目标:

  3. win10 + cuda(v9.0) 安装TensorFlow-gpu版

    之前在实习公司的电脑上装过TensorFlow-gpu,那时候很快就装好了.但在自己的笔记本上装时,却搞了很久... 一部分原因是因为用校园网下载cuda toolkit 和cudnn ,总是在最后时 ...

  4. boost--smart_ptr库

    C++没有类似Java.C#等语言的垃圾回收机制,内存管理是最为头痛的工作. new.delete以及指针的不恰当运用是C++中造成资源获取/释放问题的根源. 智能指针是解决这些问题的一种方案,boo ...

  5. Jmeter接口测试自动化 (三)(数据驱动测试)

    本文转载至http://www.cnblogs.com/chengtch/p/6105532.html 当我研究要通过用例优先级控制用例是否执行时,我发现了用"如果(if)控制器" ...

  6. HTML 显示/隐藏DIV的技巧(visibility与display的差别)

    参考链接:http://blog.csdn.net/szwangdf/article/details/1548807 div的visibility可以控制div的显示和隐藏,但是隐藏后页面显示空白: ...

  7. Python: ord()函数

    ch() , unichr() , ord() ①chr()函数用一个范围在range(256)内的整数作参数,返回一个对应的字符. >>>chr(65) 'A' ②unichr() ...

  8. 在HTML中实现和使用遮罩层

    Web页面中使用遮罩层,可防止重复操作,提示loading:也可以模拟弹出模态窗口. 实现思路:一个DIV作为遮罩层,一个DIV显示loading动态GIF图片.在下面的示例代码中,同时展示了如何在i ...

  9. Python tricks(7) -- new-style class的__slots__属性

    __slots__是在python 2.2开始引入的一个新特性, 我们来看一下官方给出的解释. This class variable can be assigned a string, iterab ...

  10. Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?

    Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?先上两种实现方式的实例:$querys["house_type_image"] ...