------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一个进程中至少有一个线程。
为什么要覆盖run方法呢?
Thread类定义了一个功能run,用于存储线程要运行的代码。
join可以用来临时加入线程执行。
yield() 暂停当前正在执行的线程对象,并执行其他线程。
Lock:替代了Synchronized
lock 获取锁
unlock释放锁
newCondition()返回绑定到此 Lock
实例的新 Condition
实例
Condition:替代了Object的 wait,notify,notifyAll
await();等待
signal();唤醒一个
signalAll();唤醒所有
interrupt(); 中断线程。
setDaemon(boolean on)将该线程标记为守护线程(即后台线程)或用户线程
this代表本类对象。
同步代码块使用的锁是任意对象。
同步函数使用的锁是this。对于static的同步函数,使用的锁不是this。是 类名.class
单词:Lock(锁),Condition, ReentrantLock(和synchronized
类似
),parseXXX, split(切割),trim(去两端空格),substring(获取子串),compareTo(比较),iterator(迭代器),
Integer a = 127;
Integer b = 127;
sop("a==b:"+(a==b));
结果为true。因为a和b指向了同一个Integer对象。因为当数值在byte范围(-128到127)内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。
StringBuilder: sb1.append(new Demo()).append(newDemo());
获取最大相同子串:
public static String getMaxSubString(String s1,String s2)
{
String max = "",min = "";
max = (s1.length()>s2.length())?s1: s2;
min = (max==s1)?s2: s1;
for(int x=0; x<min.length(); x++)
{
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
{
String temp =min.substring(y,z);
sop(temp);
if(max.contains(temp))
return temp;
}
}
return "";
}
wait和sleep的区别:
wait:释放cpu执行权,释放同步中锁。
sleep:释放cpu执行权,不释放同步中锁。
强制结束冻结状态:interrupt();目的是线程强制从冻结状态恢复到运行状态。
但是会发生InterruptedException异常。
contains(obj):判断是否包含obj。比较的是参数类型!
addAll(collection):一个集合添加另一个集合!
removeAll(collection):
单词:clear(清空),isEmpty(是否包含元素),toArray(集合变数组),retainAll(取交集),
集合中存储的都是对象的引用(地址)
HashSet:是线程不安全的。不同步。比较相同,先判hashCode,再判equals!
Set集合的功能和Collection是一致的。
LinkedList:特有方法:
addFirst(); addLast();getFirst();getLast();removeFirst();removeLast();等对首尾元素的操作
在JDK1.6出现了替代方法。把原来的没有元素返回异常变为了返回null;
OfferFirst();offerLast();peekFirst();peekLast();pollFirst();pollLast();
ArrayList:查询快。增删慢。线程不同步。
LinkedList:增删快,查询慢。线程不同步。
Vector:线程同步。被ArrayList替代了。因为效率低
LinkedList:特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增add(index,element);addAll(index,Collection);
删remove(index);
改set(index,element);
查get(index): subList(from,to); listIterator()里有个逆向遍历的方法;
intindexOf(obj):获取元素的位置。
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
public static <W> void method(W t)
TreeSet:保证元素唯一性的依据:compareTo方法return 0.
TreeSet排序的第一种方式:
让TreeSet里的元素对象自身具备比较性。其元素对象类
需要实现Comparable接口,覆盖compareTo方法。根据返回值正负判断前后!
这种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。TreeSet ts = newTreeSet(比较器对象);
定义一个类,实现Comparator(比较器)接口,覆盖compare方法。
当两种排序都存在时,以比较器为主
查找元素是否相同时用了二分法查找!
集合里增加元素对象时,也可以是基本数据类型,因为会自动包装成对象!