Java线程题例子(1)

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);
			}
			
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值