java线程sys_java线程

程序:可以理解为一组静态的代码

进程:正在进行的程序   静态的代码  运行起来

线程:正在执行程序中的小单元

1.主线程  系统线程

2.用户线程 main

3.守护线程(精灵)GC

线程--操作系统级别  CPU

如何在java中创建线程  让线程执行 多线程

掌握每一个线程的几种不同状态  状态之间如何切换

new   start()  CPU分配(run())   wait()  exception over

创建线程---就绪状态---执行状态---等待/挂起---异常/消亡---

|                                    |

|__________________|

notify/notifyAll

启动线程的3种方式:Thread;Runnable;线程池启动线程;

fb61b523f8f710863f0c07666fa00996.png

实现线程的过程 (方式1)

1.自己描述一个类

2.继承父类 Thread

3.重写run方法

4.new一个线程对象 调用start()方法  让线程进入就绪状态

实现一个多人跑步的小例子

package test0603;

public class RunningMan extends Thread{

private String name;

public RunningMan(){

}

public RunningMan(String name){

this.name=name;

}

//重写run方法

public void run(){

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

System.out.println(this.name+"跑到第"+i+"米");

}

}

}

package test0603;

public class TestMain{

public static void main(String[] args){

RunningMan r1=new RunningMan("张三");

RunningMan r2=new RunningMan("李四");

RunningMan r3=new RunningMan("王五");

//调用start方法 让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样

/*

r1.start();

r2.start();

r3.start();

*/

//run()方法是顺序执行

r1.run();

r2.run();

r3.run();

}

}

实现线程的过程(方式2)

1.自己描述一个类

2.实现一个父接口Runnable

3.重写run方法

4.new一个线程对象 需要创建Thread将自己的对象包起来 然后调用start()

package test0603;

public class RunningMan implements Runnable{

private String name;

public RunningMan(){

}

public RunningMan(String name){

this.name=name;

}

//重写run方法

public void run(){

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

System.out.println(this.name+"跑到第"+i+"米");

}

}

}

package test0603;

public class TestMain{

public static void main(String[] args){

RunningMan r1=new RunningMan("张三");

RunningMan r2=new RunningMan("李四");

RunningMan r3=new RunningMan("王五");

Thread t1=new Thread(r1);

Thread t2=new Thread(r2);

Thread t3=new Thread(r3);

//调用start方法 让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样

t1.start();

t2.start();

t3.start();

}

}

12306卖票

车票 属性 起始站 终点站  票价

系统 属性 方法

窗口 是一个线程

利用Vector集合,集合本身就是线程安全 多个线程并发操作同一个集合的时候 不会抢夺资源;

1.如何切换线程的不同状态

2.如果在设计中没有集合 我们自己想要控制线程安全

package test0603;

public class Ticket{

//一个对象 包含很多属性 增强可读性 类名 属性名 属性类型不一致;

private String start;//起始站名

private String end;//终点站名

private Float price;

public Ticket(){

}

public Ticket(String start,String end,Float price){

this.start=start;

this.end=end;

this.price=price;

}

public String getStart(){

return start;

}

public void setStart(String start){

this.start=start;

}

public String getEnd(){

return end;

}

public void setEnd(){

this.end=end;

}

public Float getPrice(){

return price;

}

public void setPrice(Float price){

this.price=price;

}

//为了打印一个对象

public String toString(){

StringBuilder sbb=new StringBuilder("[起始地址:");

sbb.append(start);

sbb.append(";\t终点地址:");

sbb.append(end);

sbb.append(";\t票价为:");

sbb.append(price);

sbb.append(";]");

return sbb.toString();

}

}

package test0603;

import java.util.*;

public class System12306{

//设计一个单例模式

private System12306(){

}

private static System12306 sys=new System12306();

public static System12306 getInstance(){

return sys;

}

private Vector tickets=new Vector<>();

{

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

tickets.add(new Ticket("武汉"+i,"深圳"+i,(i%5+5)*25F));

}

}

//从集合内获取一张票;

public Ticket getTicket(){

try{

return tickets.remove(0);

}catch(Exception e){

return null;

}

}

}

package test0603;

public class Windows extends Thread{

private String windowName;

public Windows(String windowName){

this.windowName=windowName;

}

public void run(){

this.sellTicket();

}

public void sellTicket(){

while(true){

System12306 sys=System12306.getInstance();

Ticket ticket=sys.getTicket();

if(ticket==null){

System.out.println("对不起,本窗口"+windowName+"车票已售完");

break;

}

System.out.println("本窗口"+windowName+"售出"+ticket);

}

}

}

package test0603;

public class TestMain{

public static void main(String[] args){

Windows w1=new Windows("站台A");

Windows w2=new Windows("站台B");

Windows w3=new Windows("站台C");

w1.start();

w2.start();

w3.start();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值