sleep(休眠)
当t线程调用Thread.sleep()时,会让线程t休眠指定时间 Thread.sleep() 和 Thread.currentThread().sleep() 效果一样 sleep方法不会释放同步锁 sleep不会影响到其他线程 yield(让步)礼让线程 在t线程中调用Thread.yield()时会让t线程放弃一次cpu调度(通常是当前这次调度) yield让当前线程让步给其他线程执行 wait(锁住等待) 当t线程调用obj.wait()时,t线程会进入waiting状态,并放弃obj对象锁,直到其他线程调用obj.notify()/notifyAll()方法唤醒线程t wait方法会释放同步锁 线程只能在一个同步块中调用wait方法 wait方法让两个线程交替执行 join(加入):jion()或者join(int)时间,可以等待指定的毫秒之后继续 在main线程中调用线程t.join()时,main线程会等待t线程完全执行完成才会继续执行 join让两个线程串行执行守护线程 setsetDaemon(true或者false)
设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出设置线程优先级
setPriority()设置线程的优先级同步代码块
1.什么情况下需要同步当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步.如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码. 2.同步代码块 使用synchronized关键字加上一个锁对象来定义一段代码, 这就叫同步代码块 多个同步代码块如果使用相同的锁对象, 那么他们就是同步的注意:锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象例子:
同步方法
使用synchronized关键字修饰一个方法, 该方法中所有的代码都是同步的/* * 非静态同步函数的锁是:this * 静态的同步函数的锁是:字节码对象 */ public static synchronized void print2() { System.out.print("传"); System.out.print("智"); System.out.print("播"); System.out.print("客"); System.out.print("\r\n"); }死锁:多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁,所以尽量不要嵌套使用
线程安全问题:
多线程并发操作同一数据时, 就有可能出现线程安全问题* 使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作
转载于:https://www.cnblogs.com/lxchma/p/6413928.html