解法二:
public class 线程100 {
private static int num=100;
static ArrayList<Integer> list = new ArrayList<>();
static int s1=0;
static int s2=0;
static int s3=0;
static int s4=0;
static int s5=0;
static int s6=0;
static int s7=0;
static int s8=0;
static int s9=0;
static int s10=0;
public static void main(String[] args) throws InterruptedException {
final Test01 t = new Test01();
System.out.println("--------------1----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=90){
break;
}
for (int i = 1; i <=10; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s1=count/10;
}
}.start();
System.out.println("--------------2----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=80){
break;
}
for (int i = 11; i <=20; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s2=count/10;
}
}.start();
System.out.println("--------------3----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=70){
break;
}
for (int i = 21; i <=30; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s3=count/10;
}
}.start();
System.out.println("--------------4----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=60){
break;
}
for (int i = 31; i <=40; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s4=count/10;
}
}.start();
System.out.println("--------------5----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=50){
break;
}
for (int i = 41; i <=50; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s5=count/10;
}
}.start();
System.out.println("--------------6----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=40){
break;
}
for (int i = 51; i <=60; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s6=count/10;
}
}.start();
System.out.println("-------------7-----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=30){
break;
}
for (int i = 61; i <=70; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s7=count/10;
}
}.start();
System.out.println("--------------8----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=20){
break;
}
for (int i = 71; i <=80; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s8=count/10;
}
}.start();
System.out.println("---------------9---------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=10){
break;
}
for (int i = 81; i <=90; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s9=count/10;
}
}.start();
System.out.println("--------------10----------");
new Thread(){
public void run(){
int count=0;
while(true){
synchronized(t){
if(num<=0){
break;
}
for (int i = 91; i <=100; i++) {
count+=i;
}
num--;
}
}
System.out.println(count/10);
list.add(count/10);
s10=count/10;
return;
}
}.start();
int c=0;
//目的是让前面的线程执行完了,之后才让这个线程睡觉,睡的时间不够长的话,结果会出现问题
Thread.currentThread().sleep(10);
for (int i = 0; i < list.size(); i++) {
c+=list.get(i);
}
System.out.println("List集合中打印的结果:"+c);
Thread.currentThread().sleep(10);//目的是让前面的线程执行完了,,睡的时间不够长的话,结果会出现问题
//System.out.println(list.size());
// System.out.println("总数为:"+c/10);
int k =s1+s2+s3+s4+s5+s6+s7+s8+s9+s10;
System.out.println("总数为:"+k);
}
}
解法三:
public class 线程求和 extends Thread{
static int num = 0;
int number;
public 线程求和(int n) {
number = n;
}
public static int getNum() {
return num;
}
@Override
public void run() {
int count = 0;
for (int i = 0; i < 10; i++) {
count += number + i;
}
num = count;
System.out.println(number + "+" + (number + 1) + "+...+" + (number + 9) + "=" + count);
}
public static void main(String[] args) throws InterruptedException {
int a = 0;
for (int i = 0; i < 10; i++) {
int k = i * 10 + 1;
线程求和 tt = new 线程求和(k);
tt.start();
tt.sleep(10);
a = a + tt.getNum();
}
System.out.println(a);
}
}
解法四:
public class Demo09_10个线程的和 {
@SuppressWarnings("static-access")
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; i++) {
int k = i * 10 + 1;
ThreadTest tt = new ThreadTest(k);
tt.start();
}
Thread.currentThread().sleep(100);
System.out.println("-----"+ThreadTest.num);
}
}
class ThreadTest extends Thread {
int number;
static int num;
public ThreadTest(int n) {
number = n;
}
public void run() {
int count = 0;
for (int i = 0; i < 10; i++) {
count += number + i;
}
System.out.println(number + "+" + (number + 1) + "+...+" + (number + 9)
+ "=" + count);
num+=count;