java基础———第十一天

关键字:package(包)
关键字:import(导入)
包名命名规范:所有字母小写。
如何创建:编译时在命令行: javac -d . 文件名.java("."表示当前路径,也可自定义文件路径)

包&包之间相互访问的常见错误

1.当包中的类访问到另一个包中的类的时候要用全名称:包名.类名
2.当一个包中的类访问到另一个包中的类的时候要指定classpath。
3.当一个包中的类访问到另一个包中的类的时候,类名要用public修饰,要使用的方法也需要用public修饰。

权限修饰符:protected(保护权限)是为其他包中的子类提供的一种权限。
jar包
作用:将class文件进行打包陈jar.exe文件。
创建:进入class文件加下,命令行操作:jar -vcf 文件名.jar 包名

多线程

进程:当前正在执行的程序,代表一个应用程序在内存中的执行区域。
线程:是进程中的一个执行控制单元,执行路径。
单线程:一个进程中只有一个执行路径。
多线程:一个进程中有多个执行路径。
好处:让多部分代码同时执行,提高了效率。

创建方式一:继承Thread类
步骤:
1.子类覆盖父类中的run方法,将线程运行代码存放在run中。
2.建立子类对象的同时被创建。
3.通过调研start方法开启线程。

例:

class ThreadDemo {
	public static void main(String[] args) {
		Demo d = new Demo();
		//开启线程
		d.start();
	} 
}


//通过继承Therad 创建。
class Demo extends Thread {
	public void run() {
		System.out.println("覆盖Thread中的
	}
}

特点:
1.用该方法创建的线程对象会导致每一个对象中都存储一份属性数据,无法共享,虽可以加载静态解决,但生命周期过长。
2.如果一个类明确了自己的父类,那么它就不可以在继承Thread。

创建方式二:实现Runnable接口
步骤:
1.子类覆盖接口中的run方法。
2.创建子类对象。
3.通过Thread类创建线程,并实现了以Runnable接口的子类对象作为参数类型传递给Thread类的构造函数。
4.Thread类对象调用start方法,开启线程。

例:

class ThreadDemo {
	public static void main(String[] args) {
		Threa t = new Threa();


		Thread d0 = new Thread(t);
		Thread d1 = new Thread(t);
		Thread d2 = new Thread(t);
		d0.start();
		d1.start();
		d2.start();
	}
}


//通过实现Runnable
class Threa implements Runnable {
	public void run() {
		System.out.println("覆盖Runnable中的run方法")
	}
}

特点:
1.之所以要将Runable接口的子类对象传递给Thread类的构造函数,是因为线程对象在创建时,必须明确要运行的run方法
而这个run方法定义在了Runnable接口的子类中,所以要将该run方法所属的对象传递给Thread类的构造函数。让线程对象
一建立,就知道运行哪个run方法。
2.因为该方式是定义一个Runnable接口的子类对象,可以被多个线程所操作实现了数据的共享。
3.避免了单继承的局限性。

线程的五种状态


注:临时阻塞时具备了执行资格,但没有获取资源的特殊状态。

多线程的安全问题

概况:当线程中多条代码在同时操作共享数据。

解决方式:同步机制

原理:当一条线程在操作数据时,禁止其它线程对其的操作。

同步代码块

格式:

synchronized(对象){

需要同步的代码;

}

注:该对象可以是任意对象,但不能传入匿名对象。

前提:

1.同步需要两个或者两个以上的的线程。

2.多线程使用的是同一个锁(对象)。

利:解决了多线程的安全问题。

弊:耗费资源,降低了程序运行效率。

同步函数

格式:在函数上加上synchronized修饰符即可。

注:

同步函数的锁是:this。

静态同步函数的锁是:类名.class。

单例设计模式:懒汉式(解决多线程下的安全隐患)

class Single {
	private static Single s = null;
	private Single() {}
	public static Single getIntance() {
		if (s == null){
			synchronized (Single.class){
				if (s == null){
					s = new Single();
				}	
			}
		}
		return s; 
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章