java线程篇-线程基本使用方法

题外话,最近看了本java多线程编程核心技术,有做了一次安卓的项目开发,在安卓中那些乱糟糟的线程最后我也不知道是怎么把他们弄得能运行的,玄学啊 ,安卓的线程真的不能在吐槽了,总之,因为这些原因,我准备写7篇左右的java线程方面知识,当然每篇内容不会太多了,毕竟线程知识量其实不大,这篇是基础论,稍微懂线程的就可以跳过了,谢谢。

首先,java的线程其实有4中创建方式,但是有2种非常偏,几乎没人用,就是以下2种
(实现Callable接口通过FutureTask包装器来创建Thread线程)
(使用ExecutorService、Callable、Future实现有返回结果的线程)
所以我们就暂时忽略这2种,比较常用的2种是
1,继承Thread方法

public class demo1 extends Thread{
@Override 
public void run() {
	System.out.println(“我只是告诉你如何用,无实际作用哦”);
}
}

2.、实现Runnable接口创建线程

public class demo2 implements Runnable{
	@Override
	public void run() {	
	System.out.println(“我只是告诉你如何用,无实际作用哦”);
	}
}

他们的实现原理是差不多的,如何选择取决于需要接口还是继承。

下面是关于线程的API,我简单使用2个演示一下
Object类相关api(相关的方法一定是当前线程在获取了对应的锁对象才能调用,否则会抛出异常)

o.wait() :锁对象调用该方法使当前线程进入等待状态,并立刻释放锁对象,直到被其他线程唤醒进入等锁池。

o.wait(long) :锁对象调用该方法使当前线程进入等待状态,同时释放锁对象。但是超过等待的时间后线程会自动唤醒,或者被其他线程唤醒,并进入等锁池中。

o.wait(long,int) :和o.wait(long)方法一样,如果int参数大于0则前面的long数字加1

o.notify():随机唤醒一个处于等待中的线程(同一个等待阻塞池中)

o.notifyAll():唤醒所有等待中的线程(同一个等待阻塞池中)

Thread类的相关api

Thread.currentThread():返回对当前线程对象的引用

Thread.interrupted():检测当前线程是否已经中断(调用该方法后后就将该线程的中断标志位设置位false,所以连续两次调用该方法第二次肯定时false)

Thread.sleep(long millis):使当前线程睡眠(不会释放锁对象,可以让其他线程有执行的机会)

Thread.yield():使当前线程放弃cpu的执行权(有可能立刻又被重新选中继续执行,只可能给优先级更高的线程机会)

t.getId():返回该线程的id

t.getName():返回该线程的名字

t.getPriority():返回该线程的优先级

t.getState():返回该线程的状态

t.getThreadGroup():返回该线程所属的线程组

t.interrupt():将该线程中断(实际并不会中断,只是将中断标志设置为true),如果线程正处在sleep(),join(),wait()方法中时(也就是正在阻塞中)调用该方法,该方法会抛出异常。

t.interrupted():检测该线程是否已经中断(对中断标志位不作处理)

t.isAlive():检测该线程是否还活着

t.isDaemon():检测该线程是否为守护线程

t.isInterrupted():检测该线程是否已经中断

t.join():在a线程中调用b.join(),则a线程阻塞,直到b线程执行完

t.join(long millis):和上面的方法一样,不过a线程阻塞的时间根据long的大小有关,如果达到设定的阻塞时间,就算b线程没有执行完,a线程也会被唤醒。

public class demo2 extends Thread{
	@Override
	public void run() {	
		  try {
			for(int i=5;i>0;i--) {
			//currentThread()方法
			System.out.println(i+"当前调用的线程为"+Thread.currentThread().getName());
			Thread.sleep(100);     //线程休眠
			//return          也可以停止线程
			
		} 
				
		  
		  }catch (InterruptedException e) {
			e.printStackTrace();
		}
		}
	}
public class Main {

	public static void main(String[] args) {
demo2 d=new demo2();
d.start();      //运行线程
//  d.stop();      //暴力停止,不建议(此方法后面被舍弃)
d.suspend();   //暂停线程 ,有可能造成独占公共对象(后面被舍弃)
d.resume();     //继续运行,(后面被舍弃)

	}

}

java线程篇-线程基本使用方法_第1张图片

你可能感兴趣的:(java,线程)