Java线程


一般一个软件运行会产生一个进程,一个进程会产生很多线程



生成线程的方法

方式1

定义一个线程类,它继承类Thread并重写其中的方法run(),方法run()称为线程体

由于Java只支持单继承,用这种方法定义的类不能再继承其他类

public class FirstThread extends Thread{
	public void run(){
		for(int i=1;i<=20;i++){
			System.out.println("FirstThread-->"+i);
		}
	}
public class Test {
	public static void main(String args[]){
		FirstThread ft=new FirstThread();//生成线程类对象
		ft.start();//启动线程,进入就绪状态
		for(int i=1;i<=20;i++){
			System.out.println("main-->"+i);
		}	
	}



上述代码主函数中存在2个线程,一个主函数main线程,一个ft线程,2个线程交替运行




方式2:(Java中倾向于使用接口,因为继承只能是单继承)

提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。





线程的简单控制方法

try{

Thread.sleep(2000);

}

catch(Exception e){

System.out.println(e);

}

线程休眠2000ms,醒后进入就绪状态

 

 

Thread.yield()

线程释放运行的CPU,之后重新与其他线程竞争CPU

 

t为一个线程

t.getPriority()返回t的优先级(一个整数)

t.setPriority(Thread.MAX_PRIORITY);t设为最高优先级(10/MIN1

优先级越高,执行的概率越大。



线程同步

1.多线程数据安全




2.同步线程的方法


this是一个同步锁,一个线程必须运行完synchronized里面的内容才能释放同步锁,让其它线程运行这部分。


一个线程获得了一个对象的同步锁,这个对象上的所有同步代码都不能被其他线程执行



public class MyThread1 extends service{
	private service s;
	public MyThread1(service s){
		this.s=s;
	}
	public void run(){
		s.fun1();
	}

}
public class MyThread2 {
	private service s;
	public MyThread2(service s){
		this.s=s;
	}
	public void run(){
		s.fun2();
	}

}


输出:

fun1

//3s

fun2

如果public void fun2()同步标记去掉,那么先输出fun2,再fun1


同步方法函数:锁住this



和刚刚法一的效果一样








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值