java多线程相关内容

首先说一下进程,进程是正在运行的程序,有自己的地址空间。进程的特点是具有动态性、并发性和独立性,线程就是进程内部的执行单元,进程里有无数个线程也就是轻量级进程,然后就是多线程,一个进程中同时运行了多个线程,用来完成不同的工作。

一、如何创建一个线程,创建线程有两种方式:

1、继承Thread,重写Thread类的Run方法

例:创建一个乌龟线程

public class TortoiseThread  extends Thread{

public void run() {
    //线程体
    super.run();
    this.setName("乌龟线程");
    while(true){
        System.out.println("乌龟领先啦"+"---------->"+this.getName());
    }
  }
  
}

2、实现Runnable接口,实现Run方法

例:

public class TortoiseRunnable implements Runnable{


public void run() {//线程体

    while(true){
        System.out.println("乌龟领先啦"+"---------->"+Thread.currentThread().getName());
    }
  }
}

二、启动线程

如果是继承Thread类,那么就,new一个线程类对象,然后调用start方法。

如果是实现了Runnable接口,那就先创建子线程对象,然后创建Thread对象,将子线程做形参传进来,再调用start方法。

三、两种方式的区别

1、继承Thread类的优点:编程简单

    缺点:已经继承了Thread类,无法继承其他类,有一定的局限性。

2、实现 Runnable接口优点:可以继承其他类,可以创建多个线程共享一个变量。

四、线程的的生命周期

新生状态:程序中用构造方法创建线程对象,有自己的内存空间。

就绪状态:新建线程,调用start方法进入就绪状态,但未必会执行。

运行状态:就绪状态的进程被调用,并获得CPU的资源,调用run方法。

阻塞状态:一个正在运行的程序执行一些耗时操作,如sleep(),就会暂停自己的进程进入就绪状态。

死亡状态:调用stop()方法,或者run()执行结束,进入死亡状态。

五、线程中的方法:

1、sleep()进入休眠状态,sleep(毫秒数),注:sleep()被哪个线程调用了,哪个线程就会进入休眠状态。

2、join()方法插入执行线程

3、yield()线程的礼让,让当前执行的线程暂停,不是阻塞,而是转入了就绪状态,如果调用了yield方法后,没有其他等待执行的进程,这时会马上恢复执行。

4、线程的优先级 getPriority() 和 setPriority(值)

六、线程同步

当多个线程访问同一个资源时,会出现数据不一致的问题,例如出现负数。

解决的方案就是线程加锁,加锁有同步代码块、同步方法的方式

1、同步代码块

synchronized(对象){
//同步的代码
}

2、同步方法

如果是非静态方法

【访问修饰符】synchronized 返回值类型 方法名([形参列表]){
//同步方法体
}
同步非静态方法锁对象是this

如果是静态方法

【访问修饰符】static synchronized 返回值类型 方法名([形参列表]){
   //同步方法体
 }
同步静态方法的锁对象是类的字节码

 

 

七、线程同步的优缺点
优点:解决多线程访问与处理共享数据不一致的问题
缺点:降低了效率,容易造成死锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值