用java多线程做一个心形_java多线程四种实现模板

假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程?

这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快。。。

这里把模板放在这里,需要用的时候寻找合适的来选用。

总体分为两种:

一、使用匿名内部类的方式(推荐)

1)方式1开启多线程(Thread)

//使用第一种方式,开启线程

newThread()

{public voidrun()

{for(int i=0;i<100;i++)

{

System.out.println(Thread.currentThread().getName()+"线程方式1"+i);

}

}

}.start();

2)方式2内部开启线程(Runnable)

//使用第二种方式,开启线程

Runnable r =newRunnable()

{public voidrun()

{for(int i=0;i<100;i++)

{

System.out.println(Thread.currentThread().getName()+".....方式2++"+i);

}

}

};//不可或缺

new Thread(r).start();

二、通过在外部定义类,类的实例化开启线程

3)使用第三种方式,类实例化开启线程(继承方式)

类定义:

class ThreadTest extendsThread

{public voidrun()

{for(int i=0;i<100;i++)

{

System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+i);

}

}

}

主函数中调用:

//使用第三种方式,类实例化开启线程(继承方式)

new ThreadTest().start();

4)使用第四种方式,类实例化开启线程(实现方式)

类定义:

class RunnableTest implementsRunnable

{public voidrun()

{for(int i=0;i<100;i++)

{

System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+i);

}

}

}

主函数调用:

//使用第四种方式,类实例化开启线程(实现方式)

new Thread(new RunnableTest()).start();

附测试代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 classThreadUseDemo2 {3 public static voidmain(String[] args)4 {5 //System.out.println("Hello World!");6 //使用第一种方式,开启线程

7 newThread()8 {9 public voidrun()10 {11 for(int i=0;i<100;i++)12 {13 System.out.println(Thread.currentThread().getName()+"线程方式1"+i);14 }15

16 }17 }.start();18 //主线程在这里运行

19 for(int i=0;i<100;i++)20 {21 System.out.println(Thread.currentThread().getName()+"前台线程"+i);22 }23

24 //使用第二种方式,开启线程

25 Runnable r =newRunnable()26 {27 public voidrun()28 {29 for(int i=0;i<100;i++)30 {31 System.out.println(Thread.currentThread().getName()+".....方式2++"+i);32 }33 }34 }; //不可或缺

35 newThread(r).start();36

37 //使用第三种方式,类实例化开启线程(继承方式)

38 newThreadTest().start();39 //使用第四种方式,类实例化开启线程(实现方式)

40 new Thread(newRunnableTest()).start();41 }42 }43

44 class ThreadTest extendsThread45 {46 public voidrun()47 {48 for(int i=0;i<100;i++)49 {50 System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+i);51 }52 }53

54 }55 class RunnableTest implementsRunnable56 {57 public voidrun()58 {59 for(int i=0;i<100;i++)60 {61 System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+i);62 }63 }64 }

ThreadUseDemo .java

线程学习告一段落了,之后关于线程其他的知识点,这里记下笔记,用的时候再说:

1)线程停止:

通过在主函数中控制标志位来中止子线程的循环状态,特殊情况:

当现场处于冻结状态(wait)时,就读取不到flag标记,那么线程就不会结束。解决办法:

Interrupt:清楚冻结状态,当然此时会抛异常,在异常中更改标志位即可

wait  ---

sleep ----===》一砖头下去---》清醒(运行态)抛异常->有人强制结束,可以获取运行资格,操作标记为false,循环判断为假,线程结束

2)守护线程

eg:   t1.setDaemon(true);//此时t1线程为守护线程,开启后和前台线程共同运行,互抢CPU资格,但当主线程(前台)结束后,守护线程也自动停止(依赖于前台主线程)

3) join()

eg:  t1.start();t1.join();//t1在start后,join表示向CPU申请执行权(CPU交出,处于wait状态),t1和其他正在运行的线程一起争夺,直到t1结束后交还资格给CPU

4) 线程组:谁开启的线程,就属于某个组(几乎用不到)

5)线程优先级:1--10,默认为5,经常用得到有:MIN_PRIORITY (1);MAX_PRIORITY (10); NORM_PRIORITY (5 )

定义:

这是java线程的优先级:

java.lang.Thread

public static final int MAX_PRIORITY 10

public static final int MIN_PRIORITY 1

public static final int NORM_PRIORITY 5

使用:

1 //第一种方案

2 class MyThead implementsRunnable3 {4 public voidrun()5 {6 for (int i = 1; i <= 10; i++)7 {8 System.out.println(Thread.activeCount() + "thread======>AAA");9 }10 }11 }12 //第二种方案

13 class MyThreadRunnable extendsThread14 {15

16 public voidrun()17 {18 for (int i = 1; i <= 10; i++)19 {20 System.out.println(Thread.activeCount() + "thread======BBB");21 }22 }23

24 }25

26 public classTheadMain27 {28 public static voidmain(String[] args)29 {30 MyThead myThead = newMyThead();31 Thread thread = newThread(myThead);32 MyThreadRunnable thread2 = newMyThreadRunnable();33 thread.start();34 thread.setPriority(Thread.MIN_PRIORITY);35 thread2.start();36 thread2.setPriority(Thread.MAX_PRIORITY);37 }38 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值