在上一篇 Java基础之线程那些事 咱们介绍了关于线程和进程的相关概念,还留下了个题目:即三个窗口同时卖100张票的问题,那么今天就来讲说多线程编程的实现。java
构建多线程主要有继承和实现两种方法编程
继承的方法即构建一个类继承于Thread类,并实现run方法,具体以下安全
class SubThread extends Thread{
@Override
public void run() {
//具体须要完成的业务代码
}
}
SubThread subThread=new SubThread();//建立实例
subThread.start();//线程启动
复制代码
实现java.lang.Runnable接口bash
class SubThread implements Runnable{//建立一个实现Runnable接口的类
@Override
public void run() {//实现run方法
//你的业务代码
}
}
SubThread subThread1=new SubThread();//建立一个实例
Thread t1=new Thread(subThread1);//把实例当参数传递给Thread构造方法 //获得一个线程实例
t1.start();//调用线程实例的start方法
复制代码
几个重要的步骤多线程
Thread.currentThread() //获取当前线程
//如下都是线程实例上的方法
setName(); //设置线程名字
getName(); //获取线程名字
yield();//显示释放cpu的执行权
join();//在一个线程执行中调用另外一个目标线程的join方法,意味着立马执行目标线程,且执行完毕才回到原线程
isAlive();//判断当前线程是否还存活
sleep();//显示的让线程睡眠
setPriority() //设置当前线程的优先级
getPriority()//获取当前线程的优先级
复制代码
都与Runnable接口相关ide
业务目标代码放在run方法里post
鉴于java单继的特性 实现接口都方式更具备通用性性能
若是多个线程操做同一份资源 更适合使用实现都方式ui
在上一篇中咱们留个问题:就是三个窗口卖票,票一共有100张,咱们来实现它spa
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 ,三个线程共享这个数据
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单继承的缺点。
可是本文的样例代码并非线程安全的,关于线程安全问题,咱们下一篇讲解。
喜欢本文的朋友们,欢迎长按下图关注订阅号"个人编程笔记",收看更多精彩内容~~