java基础线程_Java基础之多线程编程

回顾

在上一篇 Java基础之线程那些事 我们介绍了关于线程和进程的相关概念,还留下了个题目:即三个窗口同时卖100张票的问题,那么今天就来说说多线程编程的实现。

构建多线程主要有继承和实现两种方法

多线程创建

1.继承Thread类

继承的方法即构建一个类继承于Thread类,并实现run方法,具体如下

class SubThread extends Thread{

@Override

public void run() {

//具体需要完成的业务代码

}

}

SubThread subThread=new SubThread();//创建实例

subThread.start();//线程启动

复制代码start方法启动线程并执行对应的run方法

需要将需要实现的业务代码放在run方法内

2.实现Runnable接口

实现java.lang.Runnable接口

class SubThread implements Runnable{//创建一个实现Runnable接口的类

@Override

public void run() {//实现run方法

//你的业务代码

}

}

SubThread subThread1=new SubThread();//创建一个实例

Thread t1=new Thread(subThread1);//把实例当参数传递给Thread构造方法 //得到一个线程实例

t1.start();//调用线程实例的start方法

复制代码几个重要的步骤

1 构建一个类实现Runnable接口

2 重写run方法 run里写你的业务代码

3 构建这个类实例并当参数传递到Thread类构造方法中得到线程实例

4 线程实例调用start方法

3.Thred类的一些基础方法

Thread.currentThread() //获取当前线程

//以下都是线程实例上的方法

setName(); //设置线程名字

getName(); //获取线程名字

yield();//显示释放cpu的执行权

join();//在一个线程执行中调用另一个目标线程的join方法,意味着立马执行目标线程,且执行完毕才回到原线程

isAlive();//判断当前线程是否还存活

sleep();//显示的让线程睡眠

setPriority() //设置当前线程的优先级

getPriority()//获取当前线程的优先级

复制代码

4.对比继承与实现

都与Runnable接口相关

业务目标代码放在run方法里

鉴于java单继的特性 实现接口都方式更具有通用性

如果多个线程操作同一份资源 更适合使用实现都方式

卖票程序

在上一篇中我们留个问题:就是三个窗口卖票,票一共有100张,我们来实现它

1.继承的方法

class Window extends Thread{//继承

static int ticket=100;

@Override

public void run() {

while (true){

if(ticket>0){

System.out.println(Thread.currentThread().getName()+"售票:票号为:"+ ticket--);

}else{

break;

}

}

}

}

//创建三个线程实例

Window w1=new Window();

Window w2=new Window();

Window w3=new Window();

w1.setName("窗口1");

w2.setName("窗口2");

w3.setName("窗口3");

w1.start();

w2.start();

w3.start();

复制代码由于是一共卖100张票,故需要设ticket 为static ,三个线程共享这个数据

2.实现的方法

class Window implements Runnable{//实现接口

int ticket=100;

@Override

public void run() {

while (true){

if(ticket>0){

System.out.println(Thread.currentThread().getName()+"售票:票号为:"+ ticket--);

}else{

break;

}

}

}

}

//构建三个线程实例

Window w=new Window();

Thread t1=new Thread(w);

Thread t2=new Thread(w);

Thread t3=new Thread(w);

t1.setName("窗口1");

t2.setName("窗口2");

t3.setName("窗口3");

t1.start();

t2.start();

t3.start();

复制代码注:由于这里只有一个Window实例 所有只有一份ticket=100,不需要static修饰

多线程程序的优缺点

在单核的时代,多线程会带来线程切换的损耗,但是即使是这样多线程对图形化界面更有意义,它可增强用户体验。(例如你在单核机器上边写代码 边听歌) 实际上多个线程在cpu上来回切换,给你一种并行的假象。

在多核心时代,例如当前的8代i7处理器,已经是6核12线程了,可以保持多个线程并行运算,极大的提高性能,用多线程编程

反而能提高计算机cpu的利用率

另外多线程编程能改善程序结构,可将长又复杂的进程分割成多个线程,独立运行,利于理解和修改

总结

今天主要讲解如何实现多线程,以及线程实例上有哪些方法,需要重点掌握实现的方式,因为实现的方式避开了java单继承的缺点。

但是本文的样例代码并不是线程安全的,关于线程安全问题,我们下一篇讲解。

喜欢本文的朋友们,欢迎长按下图关注订阅号"我的编程笔记",收看更多精彩内容~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值