码迷,mamicode.com
首页 > 编程语言 > 详细

一个java多线程面试题

时间:2017-03-29 12:20:05      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:nts   not   runnable   ati   run   business   adt   log   资源   

线程a 打印 数字 0--12;

线程b 打印 字母 a--z;

打印结果:0ab1cd2ef3gh4ij5kl6mn7op8qr9st10uv11wx12yz

要求用到 线程间传值;

分析:线程a打印一个数字,线程b打印两个字母 , 进行13次循环,

通过公共资源类进行线程间传值

public class FftThreadTest {
public static void main(String[] args) { //创建final资源对象 final Business business = new Business(); char c=‘a‘;
for(int i=0;i<=12;i++){ final char a= c; business.pringtInt(i); business.setC(a); new Thread( new Runnable() { @Override public void run() { business.pringtString(); } } ).start(); c=(char)((int)c+2); } } } /**
业务类:1打印数字,2打印字母,
**/ class Business { private boolean isInt=true; //标记是否打印数字 private char c; //要打印的字母
//打印数字 同步锁 public synchronized void pringtInt(int i){
//如果不是数字等待 while(!isInt){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(i);
//修改标记 isInt=false; this.notify(); //唤醒等待线程 }
//打印字母 同步锁 public synchronized void pringtString(){
//如果是数字等待 while(isInt){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } }
//打印两个字母 for(int i=0;i<2;i++){ System.out.print(c); c++; }
//修改标记 isInt=true; this.notify(); //唤醒等待线程 } public void setC(char c){ this.c=c; } }

  

一个java多线程面试题

标签:nts   not   runnable   ati   run   business   adt   log   资源   

原文地址:http://www.cnblogs.com/xujishou/p/6639099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!