java-多线程

多线程

类继承Thread类,重写run()方法,run()方法中是线程执行的代码,调用该线程类,使用start()方法,jvm会去调用run方法。

MyT m1=new MyT();
MyT m2=new MyT();

//设置线程名称
m1.setName("飞机");
m2.setName("高铁");

m1.start();
m2.start();
-----------------
//线程类中输出getName方法会输出该线程名称
[MyT]
sout(getName+i);
-----------------------------

线程优先级

getPriority();获取线程优先级,默认为5

setPriority();设置线程优先级。最高为10,最低为1

线程优先级高表示线程获取cpu时间片的概率高,并不一定优先级高的线程执行完才执行优先级低的线程。

线程控制

sleep(long millis);使当前正在执行的线程停留指定的毫秒数

join();等等这个线程死亡.(此线程执行完毕才会执行别的线程)

void setDaemon(boolean on);将此线程标记为守护线程,当运行的线程都是守护线程时,jvm将退出。(主要线程运行完毕,守护线程就没有存在的必要了)

Runnable接口

避免了java单继承的局限性。

适合多个相同程序的代码去处理同一个资源的情况。

使用接口方式,获取线程名称需要用Thread.currentThread().getName();

附加:接口的成员特点。接口中的成员变量默认修饰为public static final
接口不能有构造方法

Myrunnable m=new Myrunnable();
Thread t1=new Thread(m);//创建线程
Thread t2=new Thread(m,"飞机");//创建线程并指定线程名字

t1.start();
t2.start();

同步代码块

锁多条语句操作共享数据,可以使用同步代码块实现

解决了多线程的数据安全问题,但当线程很多时,因为每个线程都会区判断同步上的锁,这是很耗费资源的,会降低程序 的运行效率

private Object obj=new Object();
synchronized(obj){
	if(tickets>0){
		...
	}
}

同步方法

将synchronized关键字加到方法上,锁对象是this本身

private synchronized void sellTicket(){
	
}

同步静态方法

将synchronized,static关键字加到方法上,锁对象是类名.class

private static synchronized void sellTicket(){
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值