Java学习之路_0003多线程(1)

果然,学的太少,写博客也没什么动力,总希望能做些“大事”,羽翼却还未长成,来复习下多线程吧。

1.内部类和外部类之间的访问规则?
2.如果内部类非私有,如何创建内部类?
3.如何访问静态内部类中的非静态方法和静态方法?
4.如果内部类中定义了静态成员,内部类可以不是静态的吗?
5.外部类中的静态方法可以访问非静态内部类吗?
6.什么是局部内部类?定义局部内部类需要遵循哪些规则?
7.定义匿名内部类的前提?请写出一个匿名内部类。
8.Error类和Exception类的区别?
9.如果方法声明了多个异常,如何处理?
10.RuntimeException和它的子类有什么特殊性?
11.throws和throw的区别?
12.如果父类方法抛出异常,那么子类定义覆盖父类的方法需要注意什么?
13.finally中的代码块什么情况不会被执行?
14.创建线程有哪两种方法?
15.如何获取当前线程对象?
16.同步的前提是什么?
17.同步的弊端是什么?
18.静态方法和非静态方法默认持有的锁是什么?
练习:
4.请写出一个死锁程序。
/*******************************************************************************************************************************/

1.内部类可以访问外部类的成员,包括私有,通过 外部类名.this.成员名 访问;
  外部类要访问内部类需要建立内部类的对象
2.Outer.Inner in=new Outer().new Inter()可以创建内部类对象,
  但是一般内部类会被外部类私有化
3.非静态new Outer.Inner().funtion();静态Out.Inner.function();
4.不可以
5.不可以,内部类作为外部类的成员之一,静态方法只能访问静态成员。
6.定义:在外部类的方法中定义内部类。
   内部类被定义在局部时,不可以被成员修饰符修饰,
  不能访问它所在的局部中的非final修饰的局部变量
7.定义匿名内部类的前提:内部类必须是一个类或者实现接口
new AbsDemo(){
    void show(){
        System.out.println(" ");
    }.show();
8.异常,严重的java通过Error类进行描述,不严重的,通过Exception类进行描述
9.声明几个异常,就对应有几个catch块,如果多个catch块中的异常出现继承关系,
  父类异常catch块放在最下面
10.RuntimeException和它的子类是Exception中的一个特殊的异常,如果在函数内抛出该异常,
  函数上可以不用声明,调用者也不用进行处理,编译一样通过。
11.throws后面跟的是异常类,可以有多个;throw后面跟的是异常对象,
  catch语句内的throw抛出后,函数就结束了,相当于return
12.如果父类的函数抛出一个异常A,那么子类中覆盖父类该函数的函数只能抛出异常A或A的子类;如果子类方法会产生其他异常,则只能在内部处理,不能抛出。如果父类方法
抛出多个异常,那么子类在覆盖该方法时只能抛出父类异常的子集;如果父类或接口的
  方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
13.只有一种情况不会执行:当前面执行到System.exit(0)的时候
14.实现Runnable接口或者继承Thread类
15.static Thread currentThread()
16.(1)多线程(2)同一个锁
17.判断锁耗费资源
18.静态是所属类,非静态是this

 


练习4

package com.itheima.day03;

import java.util.concurrent.locks.*;
/**
*练习4:请写出一个死锁程序
*该类用于描述一个死锁,这里用生产和销售线程作演示
*/
public class Deadlock implements Runnable
{
	private boolean flag;//进程选择标志,值为true执行生产方法,值为false执行消费方法
	private static int task=0;
	private static int products=10;
	private static Lock lockA=new ReentrantLock();
	private static Lock lockB=new ReentrantLock();
	public Deadlock(boolean flag)
	{
		this.flag=flag;
	}
	/**
	*生产方法,生产一个消费一个.
	*/
	public void produce()
	{
		lockA.lock();//A锁
		if(this.task==10)
			return;
		this.task++;
		this.products++;
		System.out.println(Thread.currentThread().getName()+":Waiting for consuming.");
		this.consume();//B锁
		lockA.unlock();
	}
	/**
	*消费方法,消费一个,生产一个.
	*/
	public void consume()
	{
		lockB.lock();//B锁
		products--;
		System.out.println(Thread.currentThread().getName()+":Waiting for producing.");
		this.produce();//A锁
		lockB.unlock();
	}
	public void run()
	{
		if(this.flag)
			this.produce();
		else
			this.consume();
	}


}

package com.itheima;

import com.itheima.day03.*;
/**
*该类用于演示死锁
*@author R
*/
public class DeadlockDemo
{
	public static void main(String[] args)
	{
		Thread t1=new Thread(new Deadlock(true));
		Thread t2=new Thread(new Deadlock(false));
		t1.start();
		t2.start();
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值