[线程组概念]
线程是可以被组织的,java中存在线程组的概念,每个线程都是一个线程组的成员,线程组把多个线程集成为一个对象,通过线程组可以同时对其中的多个线程进行操作,如启动一个线程组的所有线程等.Java的线程组由java.lang包中的Thread——Group类实现。
ThreadGroup类用来管理一组线程,包括:线程的数目,线程间的关系,线程正在执行的操作,以及线程将要启动或终止时间等,线程组还可以包含线程组。在Java的应用程序中,最高层的线程组是名位main的线程组,在main中还可以加入线程或线程组,在mian的子线程组中也可以加入线程和线程组,形成线程组和线程之间的树状继承关系。像上面创建的线程都是属于main这个线程组的。
借用上面的例子,main里面可以这样写:
public static void main(String[] args) { ThreadGroup group1=new ThreadGroup("group1"); ThreadGroup group2=new ThreadGroup(group1,"group2"); Thread t1=new Thread(group2,new MyThread()); Thread t2=new Thread(group2,new MyThread()); Thread t3=new Thread(group2,new MyThread()); t1.start(); t2.start(); t3.start(); } |
线程组的嵌套,t1,t2,t3被加入group2,group2加入group1。
另外一个比较多就是关于线程同步方面的,试想这样一种情况,你有一笔存款在银行,你在一家银行为你的账户存款,而你的妻子在另一家银行从这个账户提款,现在你有1000块在你的账户里面。你存入了1000,但是由于另一方也在对这笔存款进行操作,人家开始执行的时候只看到账户里面原来的1000元,当你的妻子提款1000元后,你妻子所在的银行就认为你的账户里面没有钱了,而你所在的银行却认为你还有2000元。
看看下面的例子:
class BlankSaving //储蓄账户 { private static int money=10000; public void add(int i) { money=money+i; System.out.println("Husband 向银行存入了 [¥"+i+"]"); } public void get(int i) { money=money-i; System.out.println("Wife 向银行取走了 [¥"+i+"]"); if(money<0) System.out.println("余额不足!"); } public int showMoney() { return money; } } |