java多线程的常用方法(以及注意事项)

java

1 /*

2 * 线程的常用方法

3 * 1.start();

4 * 2.run();

5 * 3.sleep(int millsecond);

6 * 4.isAlive(); -->判断线程是否还在运行

7 * 5.currentThread(); -->返回当前正在使用CPU资源的线程

8 * 6.interrupt(); -->激活休眠的线程

9 * */

但是需要注意的一个小点是:

1 /*

2 * 需要注意到地方:一个已经运行的线程在没有进入死亡状态时,

3 * 不要在给线程分配实体,由于线程只能引用最后分配的实体,

4 * 先前的实体就会成为“垃圾”,并且不会被垃圾收集器收集掉

5 * */

            

     

      

  如果在执行一行这样的代码:

   Thread = new Thread(Target);

       会产生这样的一个效果,如图:

     便会又开始建立一个线程,这样Thread原先的线程就会变成垃圾实体。而且更重要的是垃圾集收器不会去处理它,

因为JVM(java virtual Machine(java虚拟机))会认为原先的那个实体正在运行状态,如果突然释放掉内存,可能

会引起错误甚至设备的毁坏   。

如果在一个开启线程的情况下,有重新开启线程会怎么样勒?

代码:

 1 import java.text.SimpleDateFormat;

2 import java.util.Date;

3

4 public class Example12_5 {

5 public static void main(String args [])

6 {

7 Home home = new Home();

8 Thread showTime = new Thread(home);

9 showTime.start();

10 }

11 }

12

13 class Home implements Runnable

14 {

15 int time=0;

16 SimpleDateFormat m = new SimpleDateFormat("hh:mm:ss");

17 Date date;

18 public void run() {

19 // TODO Auto-generated method stub

20 while(time<10)

21 {

22 date = new Date();

23 System.out.println(m.format(date));

24 time++;

25 try {

26 Thread.sleep(1000);

27 } catch (InterruptedException e) {

28 // TODO Auto-generated catch block

29 e.printStackTrace();

30 }

31 if(time==3)

32 {

33 Thread thread=Thread.currentThread();

34 thread = new Thread(this);

35 thread.start();

36 }

37 }

38 }

39 }

效果图:

看到上图中的 :

                    

你会发现每一次都出现两个相同的时间,这便是垃圾实体和新实体都在运行的结果..

   下面介绍一下介绍一下currentThread()-->即当前线程 和 interrupt() ----》来激活被sleep()处于休眠的线程

1 /*

2 * 有两个线程: student和teacher 其中student准备睡觉一小时后在开始上课,

3 * teacher在输出3句“上课”后在开始上课,teacher在输出3句“上课”后,吵醒

4 * 休眠的线程student。

5 */

 1 public class Example12_6 {

2 public static void main(String args [] )

3 {

4 ClassRoom classroom = new ClassRoom();

5 classroom.student.start();

6 classroom.teacher.start();

7 }

8 }

9

10 class ClassRoom implements Runnable

11 {

12 Thread student ,teacher ; //教室里有student和teacher两个线程

13 ClassRoom()

14 {

15 teacher = new Thread(this);

16 student = new Thread(this);

17 teacher.setName("王老师");

18 student.setName("张兰");

19 }

20 public void run() {

21 // TODO Auto-generated method stub

22 if(Thread.currentThread()==student)

23 {

24 out(student.getName()+"正在睡觉,不听课");

25 try {

26 Thread.sleep(1000*360);

27 } catch (InterruptedException e) {

28 // TODO Auto-generated catch block

29 //e.printStackTrace();

30 out(student.getName()+"被老师叫醒了");

31 }

32 out(student.getName()+"开始听课了");

33 }

34 else if(Thread.currentThread()==teacher)

35 {

36 for(int i=1;i<=3;i++)

37 out("上课!");

38 try {

39 Thread.sleep(400);

40 } catch (InterruptedException e) {

41 // TODO Auto-generated catch block

42 // e.printStackTrace();

43 }

44 student.interrupt(); //激活原先休眠的student

45 }

46 }

47

48 void out(String str) {

49 System.out.println(str);

50 }

51 }

效果图:

以上是 java多线程的常用方法(以及注意事项) 的全部内容, 来源链接: utcz.com/z/393489.html

回到顶部