public
class
Test1 {
public
synchronized
void
f(){
//方法体
}
}
public
void
f(){
synchronized
(
this
){
//方法体
}
}
package
com.litl.java.test;
import
java.util.concurrent.TimeUnit;
public
class
Test1 {
public
synchronized
static
void
f(){
System.out.println(
"f-start---------------"
);
try
{
TimeUnit.MILLISECONDS.sleep(
100
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(
"f_end>>>>>>>>>>>>>>>>"
);
}
public
synchronized
void
g() {
System.out.println(
"g-start-----------"
);
try
{
TimeUnit.MILLISECONDS.sleep(
100
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(
"g_end>>>>>>>>>>>>>"
);
}
public
static
void
main(String[] args) {
for
(
int
i=
0
;i<
10
;i++){
final
Test1 t=
new
Test1();
new
Thread(
new
Runnable() {
@Override
public
void
run() {
t.f();
t.g();
}
}).start();
}
}
}
public
void
g() {
synchronized
(Test1.
class
){
System.out.println(
"g-start-----------"
);
try
{
TimeUnit.MILLISECONDS.sleep(
100
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(
"g_end>>>>>>>>>>>>>"
);
}
}
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>