黑马程序员技术交流社区

标题: 写十个线程,第一个线程求1到10的和, [打印本页]

作者: Ethan丶    时间: 2015-9-26 21:34
标题: 写十个线程,第一个线程求1到10的和,
写十个线程,第一个线程求1到10的和,
* 第二个11到20的和,第三个求21到30的和...第10个求91到100的和,求十个线程的和

作者: 冰霜之卅    时间: 2015-9-26 23:58

class adds implements Runnable{
          int s;
          int sum=0;
           adds(int s){
                  this.s=s;
                  }
          public void run(){
                for(int i=0;i<10;i++){
                        sum=(sum+s);
                        s++;
                        }
                System.out.println(sum);
}
          }

public class SumThread {
         public static void main(String[]args) throws InterruptedException{
                 adds s1=new adds(1);
                 adds s2=new adds(11);
                 adds s3=new adds(21);
                 adds s4=new adds(31);
                 adds s5=new adds(41);
                 adds s6=new adds(51);
                 adds s7=new adds(61);
                 adds s8=new adds(71);
                 adds s9=new adds(81);
                adds s0=new adds(91);
                 Thread thread1=new Thread(s1);
                Thread thread2=new Thread(s2);
                Thread thread3=new Thread(s3);
                Thread thread4=new Thread(s4);
                Thread thread5=new Thread(s5);
                Thread thread6=new Thread(s6);
                Thread thread7=new Thread(s7);
                Thread thread8=new Thread(s8);
                Thread thread9=new Thread(s9);
                Thread thread0=new Thread(s0);
                 thread1.start();
                thread2.start();
                thread3.start();
                thread4.start();
                thread5.start();
                thread6.start();
                thread7.start();
                thread8.start();
                thread9.start();
                thread0.start();
                thread0.join();
                thread9.join();
                thread7.join();
                thread6.join();
                int avg=(s1.sum+s2.sum+s3.sum+s4.sum+s5.sum+s6.sum+s7.sum+s8.sum+s9.sum+s0.sum);
                System.out.println(avg);
                                }
         }

想用for循环创建多线程  怎么弄都不行 不知道如何使用循环创建多线程。。。
虽然代码很傻  但是也勉强满足需求了。
求大神  优化代码。

作者: Ethan丶    时间: 2015-9-27 00:13
  1. package heimaexam;

  2. import java.util.Scanner;
  3. import java.util.Set;
  4. import java.util.TreeMap;

  5. /*
  6. * "adsadasdsdsdxz",获取字符串中每一个字母出现的次数:a(2)b(1)...
  7. */
  8. public class TreeMapTest {
  9.         public static void main(String[] args) {
  10.                 Scanner sc = new Scanner(System.in);
  11.                 // 定义已个字符串
  12.                 System.out.println("请输入字符串:");
  13.                 String line = sc.nextLine();
  14.                 // 定义一个TreeMap
  15.                 TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
  16.                 // 字符串转换为字符数组
  17.                 char[] ch = line.toCharArray();
  18.                 // 遍历
  19.                 for (char chr : ch) {
  20.                         Integer i = tm.get(chr);
  21.                         // 如果null;该键值不存在,把该字符作为键,1作为值存储
  22.                         if (i == null) {
  23.                                 tm.put(chr, 1);
  24.                         } else {
  25.                                 // 不是null;该键值存在,值加1,重写存储该键和值
  26.                                 i++;
  27.                                 tm.put(chr, i);
  28.                         }
  29.                 }
  30.                 // 定义字符串缓冲区变量
  31.                 StringBuilder sb = new StringBuilder();
  32.                 // 遍历,得到键、值,进行按照要求拼接
  33.                 Set<Character> set = tm.keySet();
  34.                 for (Character key : set) {
  35.                         Integer value = tm.get(key);
  36.                         sb.append(key).append("(").append(value).append(")");
  37.                 }
  38.                 //把字符串缓冲区转换为字符串输出
  39.                 System.out.println(sb.toString());
  40.         }
  41. }
复制代码

作者: Ethan丶    时间: 2015-9-27 00:14
Ethan丶 发表于 2015-9-27 00:13

请输入字符串:
asdxzcxzvwer
a(1)c(1)d(1)e(1)r(1)s(1)v(1)w(1)x(2)z(2)

作者: jekyll    时间: 2015-9-27 00:43
午夜大神多啊,我都懒得敲。。。
向刻苦的同学学习
作者: 大大大卷    时间: 2015-9-28 09:47
前面的忘得差不多了,搞了很久才搞出来,代码如下
  1. package cn.itheima.bbs.problem;

  2. public class ThreadDemo {


  3.         public static void main(String[] args) {
  4.                 Sum s = new Sum();
  5.                 /*AddThread at0 = new AddThread(1,s);
  6.                 AddThread at1 = new AddThread(11,s);
  7.                 AddThread at2 = new AddThread(21,s);
  8.                 AddThread at3 = new AddThread(31,s);
  9.                 AddThread at4 = new AddThread(41,s);
  10.                 AddThread at5 = new AddThread(51,s);
  11.                 AddThread at6 = new AddThread(61,s);
  12.                 AddThread at7 = new AddThread(71,s);
  13.                 AddThread at8 = new AddThread(81,s);
  14.                 AddThread at9 = new AddThread(91,s);
  15.                 Thread t0 = new Thread(at0);
  16.                 Thread t1 = new Thread(at1);
  17.                 Thread t2 = new Thread(at2);
  18.                 Thread t3 = new Thread(at3);
  19.                 Thread t4 = new Thread(at4);
  20.                 Thread t5 = new Thread(at5);
  21.                 Thread t6 = new Thread(at6);
  22.                 Thread t7 = new Thread(at7);
  23.                 Thread t8 = new Thread(at8);
  24.                 Thread t9 = new Thread(at9);*/
  25.                 for(int i = 0; i<10;i++){
  26.                         new Thread(new AddThread(i*10+1,s)).start();
  27.                 }

  28.                 /*t0.start();
  29.                 t1.start();
  30.                 t2.start();
  31.                 t3.start();
  32.                 t4.start();
  33.                 t5.start();
  34.                 t6.start();
  35.                 t7.start();
  36.                 t8.start();
  37.                 t9.start();*/
  38.                 try {
  39.                         Thread.sleep(5000);
  40.                 } catch (InterruptedException e) {
  41.                         // TODO Auto-generated catch block
  42.                         e.printStackTrace();
  43.                 }
  44.                 System.out.println(Sum.sum);

  45.         }


  46. }
  47. class AddThread implements Runnable {
  48.         int a;
  49.         Sum s ;

  50.         AddThread(int a,Sum s) {
  51.                 this.a = a;
  52.                 this.s = s;
  53.         }

  54.         @Override
  55.         public void run() {
  56.                 synchronized(s){
  57.                 for (int j = 0; j < 10; j++) {
  58.                         Sum.sum = Sum.sum + j + a;
  59.                         System.out.println(Thread.currentThread().getName()+"is running!");

  60.                 }
  61.                 }
  62.         }

  63. }

  64. class Sum{
  65.         public static int sum = 0;
  66. }
复制代码

作者: Ethan丶    时间: 2015-9-28 20:45
创建十个进程?数组加循环创建线程?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2