JAVA多线程知识点总结

1.在Java中有一个主线程。这个主线程不需要我们自己创建,是一运行就有的。而我们自己要创建的是我们自己的线程。(一个线程是以一个对象的形式呈现的。)

2.在Java中,一般通过两种方式来创建多线程。
一个是创建一个我们自己的类(MyThread),这个类要继承Thread类,同时覆盖run方法,再实例化这个我们自己的类。

class MyThread extends Thread{
}
public static void main(String[] args) {

		MyThread t1=new MyThread("Thread1");

		MyThread t2=new MyThread("Thread2");

		t1.start();

		t2.start();

	}

另一个方法是创建一个我们自己的类,这个类要实现Runnable接口,同时覆盖run方法。通过new Thread(MyThread())来创建线程。

class MyThread implements Runnable{
}
public static void main(String[] args) {

		Thread t1=new Thread(new MyThread("Thread1"));

		Thread t2=new Thread(new MyThread("Thread2"));

		t1.start();

		t2.start();

	}

【注意,在接口方法实现是,要使用
Thread t1=new Thread(new MyThread("Thread1"));
语句,Thread后跟的括号内填自己定义的进程对象】

3.调用对象的start方法即可让线程开始跑。start象征着对run方法的控制执行。(而非run方法,run方法仅指的是单线程的执行)

4.synchronized是对象的一个同步锁。被这个关键字修饰的部分代码,称为互斥区。当某个线程在访问这段代码的时候,其他线程对这段代码互斥访问。
(1)修饰代码段是:

synchronized(this) {
	code
}

(2)修饰方法

	public synchronized void run() {
                       code
}

(3)修饰静态static方法,就是给类加锁(也就是给整个类加锁,对这个类的对象都有用。对class对象加锁也是这样的效果)。

5.Thread.currentThread().getName()方法的作用是获得当前活动线程的名字。

Thread t1=new Thread(sellTicket,"t1");
//sellTicket是线程对象名(可重复进行)。t1是每个线程的名。

7.wait()的作用是让当前调用这个方法的线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁,直到它被其他线程通过notify()或者notifyAll()唤醒。
该方法只能在同步方法或同步代码段中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。

8.而notifyAll()解除所有那些在该对象上调用wait方法的线程的阻塞状态,notify()随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。
这两种方法只能在同步方法或同步块内部调用。

9.yield()方法是Thread类的静态方法。他的作用是让当前线程从运行状态进入就绪态,而时间片有可能会交给另一个线程(优先级越高,交给的可能性越大)。
操作系统也许并不会把时间片给其他线程,而是又给回给这个进入就绪态的线程了。而且yield()是不会令线程释放锁的。

10.sleep()也是Thread的静态方法。他有两个实现,Thread.sleep(long millis)Thread.sleep(long millis, int nanos)。
他让当前线程进入阻塞状态持续一段时间,这期间时间片一定会让给其他线程。他不会释放锁,然后过了这个特定的时间后该线程变回就绪态。

11.join()是Thread类中的方法(不是static)。他的主要作用就是同步,令本来交替执行的线程变得顺序执行。
例如,main线程调用了线程son的join方法,会令main线程进入阻塞态,而son线程继续运行,直到son线程运行完了,main线程才会重新运行。join一定要在start后面调用,否则没用。

12.如果要终止线程,一般都采用interrupt()方法。
与线程的中断有关的方法有几个,都是Thread类的方法,分别是

public void interrupt(),public static boolean interrupted(), public boolean isInterrupted()。

13.interrupt()方法的作用是将中断标记位置位为true。interrupted()isInterrupted()都能够用于检测对象的“中断标记”。

14.相比多进程而言,多线程开销较小。

15.getPriority()确定线程的优先级
setPriority()设置线程的优先级

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值