标签:Runnable target Thread 代码 线程 new 多线程
方式一:实现Runnable接口
1,自定义多线程类,并实现Runnable接口
2,添加父接口中未实现的run()方法,run()方法里面放着的是我们的业务代码
3,创建自定义对象,只创建一次,作为业务对象存在
4,创建对个Thread线程类对象,并且将业务对象交给线程对象来完成
5,以多线程的方式启动多个线程对象
优点:自定义线程只是实现了Runnable接口,后续还可以继承其他类,
package cn.tedu.thread;
public class TestRunnableV2 {
public static void main(String[] args) {
TicketsRunnableV2 target=new TicketsRunnableV2();
Thread t1=new Thread(target);
Thread t2=new Thread(target);
Thread t3=new Thread(target);
Thread t4=new Thread(target);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
/*
同步锁:
相当于给容易出现问题的代码加了一把锁,包裹了所有可能会出现数据安全问题的代码加锁之后,
就有了同步(排队)的效果,但是加锁的范围需要考虑
不能太大:太大效率低下
不能太小:出现数据安全问题
*/
class TicketsRunnableV2 implements Runnable{
int tickets=100;
@Override
public void run() {
while (true){
/*
同步代码块:synchronizde(锁对象){会出现安全隐患的所有代码}
在同步代码块中的代码,同一时刻只会被一个线程执行
注意:同步代码块必须保证所有线程对象使用同一一把唯一的锁
*/
synchronized (TicketsRunnableV2.class) {//同步锁的唯一性
if(tickets>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "==" + tickets--);
}
if (tickets <= 0) break;
}
}
}
}
标签:Runnable,target,Thread,代码,线程,new,多线程 来源: https://www.cnblogs.com/hanmopx/p/15467416.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。