1 、继承Thread类编写两个线程类,分别输出10个整数和26个英文字母,测试这两个线程的执行顺序。
public static void main(String[] argc)
{
integralThread iT=new integralThread();
letterThread lT=new letterThread();
iT.start();
lT.start();
}
}
class integralThread extends Thread{
@Override
public void run() {
for(int i=0;i<10;i++)
{
try {
sleep((long) 0.6);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(i);
}
}
}
class letterThread extends Thread{
@Override
public void run() {
for(char c= 'A';c<='Z';c++)
{
System.out.println(c);
}
}
2、 有一个篮子,每次都只能装一个物品,模拟篮子中装一个物品,拿走一个物品的例子
不可以没等拿走,还继续装
运用生产者消费者方法执行的代码:
public static void main(String[] argc)
{
basket b=new basket();
installThread i=new installThread(b);
takeThread t=new takeThread(b);
Thread t1=new Thread(i);
Thread t2=new Thread(t);
t1.start();
t2.start();
}
}
class basket{
private int bk=0;
//装东西
public synchronized void add() {
if (bk == 1) {
try {
wait();
System.out.println("请暂停装东西!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
bk++;
System.out.println("篮子里有一个东西");
}
}
//拿东西
public synchronized void remove(){
if (this.bk == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
System.out.println("篮子里没有东西");
bk--;
}
}
}//装东西
class installThread implements Runnable
{
private basket box;
public installThread(basket box) {
// TODO Auto-generated constructor stub
this .box = box;
}
public void run() {
for(int i=0;i<20;i++)
{
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
box.add();
}
}
}
//拿东西
class takeThread implements Runnable
{
private basket box;
public takeThread(basket box) {
this.box=box;
}
public void run() {
for(int i=0;i<20;i++)
{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
box.remove();
}
}
}
下面这个比上一个代码简单
public static void main(String[] args) throws Exception {
LanZi l=new LanZi();
new Thread(l).start();
new Thread(l).start();
}
}
class LanZi implements Runnable{
public static boolean flag=false;
public static Object obj=new Object();
@Override
public void run() {
while(true){
synchronized (obj) {
if(flag){
System.out.println("拿东西");
try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}
flag=false;
}else{
System.out.println("放东西");
try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}
flag=true;
}
}
}
}
}
3 、往一个集合中扔随机10个偶数,直到扔到10个停止
//存在List中
public static void main(String[] args) throws Exception {
Conn c=new Conn();
FutureTask<List<Integer>> f=new FutureTask<List<Integer>>(c);
new Thread(f).start();
List<Integer> list=f.get();
for(Integer i:list){
System.out.println(i);
}
}
}
class Conn implements Callable<List<Integer>>{
public static List<Integer> list=new ArrayList<Integer>();
public List<Integer> call() throws Exception {
while(list.size()<10){
list.add(new Random().nextInt(10)*2);
}
return list;
}
}
//存在普通集合中
public static void main(String[] argc){
throwNumber tn=new throwNumber();
Thread t1=new Thread(tn);
t1.start();
}
}
class throwNumber implements Runnable{
int a[] =new int[10];
public void run() {
for(int i=0;i<10;i++)
{
a[i]=addArray();
System.out.println(a[i]);
}
}
public synchronized int addArray()
{
Random r=new Random();
int num=r.nextInt(100)*2;
//System.out.println(num);
return num;
}
}
4 、这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒 随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名
public static void main(String[] args) throws Exception {
山洞 s1=new 山洞("A");
山洞 s2=new 山洞("B");
山洞 s3=new 山洞("C");
山洞 s4=new 山洞("D");
山洞 s5=new 山洞("E");
山洞 s6=new 山洞("F");
山洞 s7=new 山洞("G");
山洞 s8=new 山洞("H");
山洞 s9=new 山洞("I");
山洞 s10=new 山洞("J");
s1.start();
s2.start();
s3.start();
s4.start();
s5.start();
s6.start();
s7.start();
s8.start();
s9.start();
s10.start();
}
}
class 山洞 extends Thread{
private String name;
public static Object obj=new Object();
public 山洞(String name){
this.name=name;
}
@Override
public void run() {
synchronized (obj) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name+":正在过此山洞");
}
}
}
5、 生成一个长度是3的随机字符串,把这个字符串作为当做密码,创建一个破解线程,
匹配这个密码 ,打印都用过哪些字符串去匹配
public static void main(String[] args) throws Exception {
String password="456";
System.out.println("原密码:"+password);
PoJie p=new PoJie(password);
p.start();
}
}
class PoJie extends Thread{
private String password;
PoJie(String password){
this.password=password;
}
@Override
public void run() {
while(true){
String a="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
String str="";
for(int i=0;i<3;i++){
int index=(int)(Math.random()*a.length());
str+=a.charAt(index);
}
if(str.equals(password)){
System.out.println("密码破解成功:"+str);
break;
}else{
System.out.println("正在破解中....:"+str);
}
}
}
}
6、 英雄有可以放一个技能叫做: 波动拳-adugen。 每隔一秒钟,可以发一次,但是只能连续发3次。 发完3次之后,需要充能5秒钟,充满,再继续发。
输出类似:
波动拳第1次发
波动拳第2次发
波动拳第3次发
开始为时5秒的充能
波动拳第1次发
波动拳第2次发
波动拳第3次发
开始为时5秒的充能
public static void main(String[] args) throws Exception {
new Thread(new Hero()).start();
}
}
class Hero implements Runnable{
@Override
public void run() {
while(true){
try {
adugen();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void adugen() throws Exception{
for(int i=0;i<3;i++){
System.out.println("波动拳第"+(i+1)+"次发");
Thread.sleep(1000);
}
System.out.println("开始为时5秒的充能");
Thread.sleep(5000);
}
}