多线程——Java核心-10

Java中线程的两个方面:Thread类及其子类的对象、一条独立的执行线索

Java中给线程安排任务的途径:继承Thread类并重写run方法、实现Runnable接口并实现其中的run方法。

 

一个简单的多线程体会程序:

package com.bn;
/*一个简单的多线程体会程序
*/
public class ThreadExSample
{
	public static void main(String args[])
	{
		MyTask mtask=new MyTask();
		Thread t=new Thread(mtask);
		
		MyThread mt=new MyThread();
		
		mt.start();
		t.start();
	}
}

class MyThread extends Thread
{
	@Override
	public void run()
	{
		for(int i=0;i<100;i++)
		{
			System.out.print (" ["+i+"] ");
		}
	}
}

class MyTask implements Runnable 
{
	@Override
	public void run()
	{
		for(int i=0;i<100;i++)
		{
			System.out.print (" <"+i+"> ");
		}
	}
}

特点:一系列线程以某种顺序启动并不意味着它们将按照该顺序执行。对于任何一组启动的线程来说,调度程序不保证其顺序。持续时间也没有保证。
一旦线程死去,它就永远不能在重新启动(尽管对象还在),一辈子就运行一次。

 

线程运行的优先级问题(让步    宏观调控:概率问题)

当前线程的优先级不会比其他线程的优先级低,运行线程的优先级将大于等于线程池中线程的最高优先级。
优先级设定:

//线程的优先级设定
FooRunable r=new FooRunable();
Thread t=new Thread(r);
t.setPriority(8);//实用时一般不用数字
t.start();

//使用时:Thread类具有3个常量
Thread.MIN_PRIORITY   //(1)
Thread.NORM_PRIORITY   //(5)
Thread.MAX_PRIORITY   //(10)

阻塞

join()方法:相当于把当前程序此语句之后的部分挂到调用join方法的线程之后。

T1会等T2执行完成之后再执行后半部分。

synchronized 修饰同步成员

一旦一个线程进入一个实例的任何同步方法,别的线程将不能进入该同一实例的其它同步方法,但是该实例的非同步方法仍然能够被调用
synchronized(成员){} :锁定指定成员,直到执行完括号内容


sleep() vs wait()
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

volatile的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值