包
关键字: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;
}
}