线程学习案例

我不是程序员—小白线程案例

1.线程创建:(案例)

继承Thread类

//打印和计数
public class TestThread {
	
	public TestThread() {
		PrintChar pc = new PrintChar('A', 12);
		PrintNum pn = new PrintNum(12);
		pc.start();
		pn.start();
	}
	public static void main(String[] args) {
		new TestThread();
	}
    
	
  class PrintChar extends Thread{
	  private char c;
	  private int num;
	  public PrintChar(char c ,int num) {
		  this.c = c;
		  this.num = num;
	  }
	  
	  @Override
	  public void run() {
		  for(int i=0;i<num;i++) {
			  System.out.print(c);
		  }
	  }
  }
  class PrintNum extends Thread{
	  private int num;
	  
	public PrintNum(int num) {
		this.num = num;
	}
	@Override
	public void run() {
		for(int i=0;i<num;i++) {
			  System.out.print(i);
		  }
	}
  }

}

执行结果:

AAAAAAAAAAAA01234567891011

实现Runable接口:

//模拟银行取款
public class TestAccount {
  public static void main(String[] args) {
	ChangeBalance c = new ChangeBalance();
	Thread t1 = new Thread(c);
	Thread t2 = new Thread(c);
	t1.start();
	t2.start();
}
	
	
}
class Account{
	int id=0;
	double balance = 5000;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
class ChangeBalance implements Runnable{
   Account account = new Account();
   
   public synchronized void getBalance(double amount) {
	   String name = Thread.currentThread().getName();
	   System.out.println("线程名:"+name);
	   if(amount<account.getBalance()) {
		   System.out.println("余额足够");
		   System.out.println("开始取钱"+amount);
		   account.setBalance(account.getBalance()-amount);
		   System.out.println("取钱成功,余额为:"+account.getBalance());
	   }else {
		   System.out.println("余额不足");
	   }
   }
	
	@Override
	public void run() {
		getBalance(3000);
	}
	
}
运行结果:
线程名:Thread-0
余额足够
开始取钱3000.0
取钱成功,余额为:2000.0
线程名:Thread-1
余额不足

2.多线程买票问题

//买票问题
public class Test12306 {
public static void main(String[] args) {
	Method m = new Method();
	Thread t1 = new Thread(new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			m.m1();
		}
	});
	Thread t2 = new Thread(new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			m.m2();
		}
	});
	t1.start();
	t2.start();
}
}
class Method{
    synchronized void m1() {
		for(int i=0;i<5;i++) {
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
    synchronized void m2() {
		for(int i=0;i<5;i++) {
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}

运行结果:

Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-1:0
Thread-1:1
Thread-1:2
Thread-1:3
Thread-1:4

3.Lock的简单使用

public class LockTest {
 public static void main(String[] args) {
	LockDemo demo = new LockDemo();
	new Thread(new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			demo.add();
		}
	}).start();
new Thread(new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			demo.add();
		}
	}).start();
}
}
class LockDemo{
	Lock lock = new ReentrantLock();
	
	void add() {
		lock.lock();
		try {
			System.out.println(Thread.currentThread()+"得到锁");
			Thread.sleep(1000);
			for(int i=0;i<5;i++) {
				System.out.println(i+";");
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			System.out.println(Thread.currentThread()+"释放锁");
			lock.unlock();
		}
	}
}

运行结果:

Thread[Thread-0,5,main]得到锁
0;
1;
2;
3;
4;
Thread[Thread-0,5,main]释放锁
Thread[Thread-1,5,main]得到锁
0;
1;
2;
3;
4;
Thread[Thread-1,5,main]释放锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SinceThenLater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值